版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Linux自動化運維項目7:AnsiblePlaybook基本語法
學(xué)習(xí)目標(biāo)【知識目標(biāo)】了解YAML和JSON基本格式。了解Ansible常用的內(nèi)置模塊。了解ansible-doc命令基本語法。了解AnsiblePlaybook基本語法?!炯寄苣繕?biāo)】掌握ansible-doc命令的使用方法,能夠查看Ansible模塊的示例和文檔信息。掌握AnsibleAdHoc命令的使用方法,能夠使用命令執(zhí)行臨時任務(wù)。掌握AnsiblePlaybook的使用方法,能夠編寫基本的AnsiblePlaybook并實施Play任務(wù)。【素質(zhì)目標(biāo)】培養(yǎng)讀者的團(tuán)隊合作精神、協(xié)同創(chuàng)新能力,使其能夠在團(tuán)隊中積極合作、有效溝通。培養(yǎng)讀者分析和評估信息的能力,使其能夠運用邏輯思維解決復(fù)雜問題。AnsiblePlaybook基本語法任務(wù)1:AdHoc命令目錄/Contents010203AdHoc命令簡介AdHoc命令通過模塊執(zhí)行任務(wù)查看模塊文檔信息01AdHoc命令簡介AdHoc命令簡介使用Ansible進(jìn)行自動化管理時,通常有兩種方式,一種是通過Playbook文件進(jìn)行管理,另一種則是使用AdHoc命令進(jìn)行管理。在計算機(jī)領(lǐng)域中,AdHoc通常指的是一種無須事先準(zhǔn)備的、快速解決問題的方法。Ansible提供AdHoc命令,該命令可以快速執(zhí)行單個任務(wù),無須編寫Playbook即可在線操作。AdHoc命令雖然存在一些局限性,但對于快速執(zhí)行簡單任務(wù)而言非常實用。對于Ansible自動化的專家來說,使用AdHoc命令可以更加高效地操作服務(wù)器;當(dāng)然,對于更加復(fù)雜的場景,則需要使用AnsiblePlaybook來充分發(fā)揮Ansible的作用。AdHoc命令簡介AdHoc命令集由/usr/bin/ansible實現(xiàn),其基本語法如下:在使用AdHoc命令時,需要使用host-pattern參數(shù)來指定要在哪些受管主機(jī)上運行命令,host-pattern可以是清單文件中的特定主機(jī)或主機(jī)組。使用--list-hosts選項可以列出與特定主機(jī)模式匹配的主機(jī),如果需要指定其他清單文件位置,可以使用-i選項替換默認(rèn)位置。使用-m選項可以指定要在目標(biāo)主機(jī)上運行的模塊名稱。模塊是實現(xiàn)任務(wù)的小程序,有些模塊不需要額外的信息,而有些模塊需要使用額外的參數(shù)來指定操作細(xì)節(jié)。使用-a選項以帶引號字符串的形式傳遞參數(shù)列表。ansible[pattern]-m[module]-a"[moduleoptions]“ansible<host-pattern>[-mmodule_name][-aargs]AdHoc命令簡介AdHoc命令常見的參數(shù)或選項:序號參數(shù)或選項描述1<host-pattern>表示目標(biāo)主機(jī)或主機(jī)組的模式,可以使用IP地址、主機(jī)名或主機(jī)組名稱等方式指定。如ansibleall-mping表示對所有主機(jī)執(zhí)行ping命令2-mmodule_name表示要執(zhí)行的模塊的名稱,如setup、debug、yum、shell等3-aargs表示要傳遞給模塊的參數(shù),以字符串的形式表示,多個參數(shù)可以使用空格分隔。如ansibleall-mshell-a"ls-l/var/log"表示在所有主機(jī)上執(zhí)行l(wèi)s命令4-iinventory表示指定主機(jī)清單文件的路徑,默認(rèn)為/etc/ansible/hosts5-fforks表示同時運行的進(jìn)程數(shù),默認(rèn)為56-uREMOTE_USER表示指定要在遠(yuǎn)程主機(jī)上運行命令的遠(yuǎn)程用戶,如果未指定,則默認(rèn)使用當(dāng)前用戶7-k--ask-pass
表示使用遠(yuǎn)程主機(jī)的賬戶和密碼進(jìn)行身份驗證8-K--ask-become-pass表示在遠(yuǎn)程主機(jī)上使用sudo命令來執(zhí)行任務(wù),需要在執(zhí)行命令時提供遠(yuǎn)程用戶的提權(quán)密碼9-b表示使用sudo權(quán)限執(zhí)行任務(wù),如果不需要輸入sudo密碼,需要在遠(yuǎn)程主機(jī)上配置sudo權(quán)限NOPASSWD10--ask-vault-pass表示要求輸入Vault密碼進(jìn)行解密11--vault-password-file=vault_password_file表示指定Vault密碼文件的路徑12--syntax-check表示檢查語法錯誤13--list-hosts表示列出與模式匹配的主機(jī)名02AdHoc命令通過模塊執(zhí)行任務(wù)AdHoc命令通過模塊執(zhí)行任務(wù)AdHoc命令通常使用模塊來執(zhí)行特定任務(wù)。Ansible提供了大量的模塊。這些模塊已經(jīng)經(jīng)過測試,并作為Ansible標(biāo)準(zhǔn)安裝的一部分。使用這些模塊可以輕松地執(zhí)行許多常見的系統(tǒng)管理任務(wù),而無須自己編寫腳本或命令。Ansible的模塊庫包括大量的內(nèi)置模塊,這些模塊對許多常見操作提供了支持,例如文件操作、用戶管理、包管理、網(wǎng)絡(luò)操作、監(jiān)視等。這些模塊可以輕松地與其他Ansible組件(例如Playbook、角色、任務(wù)等)結(jié)合使用,以實現(xiàn)靈活、可重復(fù)使用的自動化工作流程。AdHoc命令通過模塊執(zhí)行任務(wù)Ansible常用模塊:序號模塊名描述主要選項模塊命令示例1copy用于將本地文件復(fù)制到遠(yuǎn)程受管節(jié)點src:指定要復(fù)制到遠(yuǎn)程節(jié)點主機(jī)的本地文件的路徑,可以是絕對路徑或相對路徑。如果路徑是一個目錄,將進(jìn)行遞歸復(fù)制。在這種情況下,路徑以“/”結(jié)尾,只有該目錄的內(nèi)部內(nèi)容會被復(fù)制到目標(biāo)位置。如果不以“/”結(jié)尾,整個目錄及其所有內(nèi)容都將被復(fù)制。dest:指定復(fù)制的文件在遠(yuǎn)程節(jié)點主機(jī)上的路徑,必須是遠(yuǎn)程節(jié)點主機(jī)的絕對路徑。content:在控制節(jié)點上生成文件的內(nèi)容,與src參數(shù)不能同時使用。owner:所屬用戶。group:所屬用戶組ansiblewebservers-mcopy-a"src=/etc/hostsdest=/tmp/hosts"2file管理遠(yuǎn)程主機(jī)上的文件或目錄,例如創(chuàng)建或刪除文件或目錄、更改文件或目錄的權(quán)限或所有者等path:指定要操作的文件或目錄的路徑。state:指定文件或目錄的狀態(tài),可選值有absent、directory、touch、link、hard、file等。mode:指定文件或目錄的權(quán)限模式,可以是數(shù)字或字符串形式,例如0644或u+rwx、g+rx等owner:文件的所屬用戶。group:文件的所屬用戶組ansiblewebservers-mfile-a"path=/etc/foo.confmode=600owner=foogroup=foo"AdHoc命令通過模塊執(zhí)行任務(wù)Ansible常用模塊:序號模塊名描述主要選項模塊命令示例3lineinfile在文件中查找指定的行,并進(jìn)行添加、刪除或替換等操作path:指定要修改的文件的路徑。line:指定要插入或替換到文件中的行內(nèi)容。state:指定要執(zhí)行的操作,可選值為present或absent。regexp:用于匹配需要修改或刪除的行的正則表達(dá)式。insertafter:指定在哪行之后插入新行ansiblewebservers-mlineinfile-a"path=/etc/
foo.confregexp='^Setting'line='Setting=NewValue'"4synchro-nizesynchronize模塊是對rsync的封裝,以同步本地和遠(yuǎn)程主機(jī)的文件或目錄src:指定要同步到目標(biāo)主機(jī)的源主機(jī)的路徑。dest:指定從源主機(jī)同步的目標(biāo)主機(jī)的路徑。mode:指定同步模式,可選值有push、pull,默認(rèn)為pushansiblewebservers-msynchronize-a"src=/
path/to/sourcedest=/
path/to/destination"5package用于管理軟件包,包括安裝、升級、刪除等操作,可自動檢測操作系統(tǒng)的包管理器name:軟件包名稱。state:軟件包狀態(tài),present表示已安裝,latest表示最新版本,absent表示未安裝ansiblewebservers-mpackage-a"name=apache2state=present"6yum使用yum包管理器管理軟件包name:指定軟件包名稱。state:指定軟件包的狀態(tài),可選項有present、absent、latest等。enablerepo:指定要啟用的yum源的名稱ansiblewebservers-myum-a"name=httpdstate=present"AdHoc命令通過模塊執(zhí)行任務(wù)Ansible常用模塊:序號模塊名描述主要選項模塊命令示例7apt使用apt包管理器管理軟件包name:指定軟件包的名稱。state:指定軟件包的狀態(tài),可選項有present、absent、latest等ansiblewebservers-mapt-a"name=apache2state=present"8dnf使用dnf包管理器管理軟件包name:要操作的軟件包的名稱。state:指定軟件包的狀態(tài),可選項是present、latest、absent等ansiblewebservers-mdnf-a"name=httpdstate=present"9pip使用pip包管理器管理Python包name:指定Python包名稱。version:指定Python包版本號。state:指定Python包的狀態(tài),可選項有present、absent、latest等ansiblewebservers-mpip-a"name=djangostate=present"10firewalld管理防火墻規(guī)則service:指定需要添加或移除的服務(wù)的名稱。state:指定服務(wù)狀態(tài),可選項為enabled、disabled等。immediate:是否立即生效。permanent:是否永久生效ansiblewebservers-mfirewalld-a"service=
httpstate=enabled"11reboot重新啟動一個機(jī)器,等待它關(guān)機(jī)、重新啟動并響應(yīng)命令reboot_timeout:重啟等待時間的限制,規(guī)定了等待機(jī)器重啟并響應(yīng)測試命令的最大秒數(shù)。默認(rèn)情況下,它的值為600s。reboot_command:用于指定重啟機(jī)器的命令和參數(shù)。在使用此選項時,pre_reboot_delay、post_reboot_
delay和msg將被忽略ansiblewebservers-mrebootAdHoc命令通過模塊執(zhí)行任務(wù)序號模塊名描述主要選項模塊命令示例12service管理系統(tǒng)服務(wù)name:指定服務(wù)的名稱。state:指定服務(wù)的狀態(tài),可選項有started、stopped、restarted、reloaded等。enabled:指定服務(wù)是否開機(jī)自啟動ansiblewebservers-mservice-a"name=httpdstate=started"13user管理用戶name:指定用戶的名稱。uid:指定用戶的UID。state:指定用戶的狀態(tài),比如present、absent等ansiblewebservers-muser-a"name=foostate=present"14get_url從遠(yuǎn)程URL下載文件并將其放置在遠(yuǎn)程主機(jī)上的指定路徑下url:需要下載文件的URL。dest:遠(yuǎn)程主機(jī)上文件的目標(biāo)路徑。url_username:如果URL需要驗證,則表示提供的用戶名。url_password:如果URL需要驗證,則表示提供的密碼ansiblewebservers-mget_url-a"url=http://
/file.tar.gzdest=/tmp/file.tar.gz"15nmcli管理網(wǎng)絡(luò)設(shè)備,配置和管理不同類型的網(wǎng)絡(luò)連接conn_name:指定網(wǎng)絡(luò)連接的名稱。ifname:指定網(wǎng)絡(luò)接口的名稱。type:指定網(wǎng)絡(luò)連接的類型,如ethernet、teams、bonds等。ip4:指定IPv4地址和相關(guān)屬性。gw4:指定IPv4網(wǎng)關(guān)。state:指定網(wǎng)絡(luò)連接的狀態(tài)。autoconnect:指定網(wǎng)絡(luò)連接是否應(yīng)該在系統(tǒng)引導(dǎo)時自動連接ansibletarget-mnmcli-a"conn_name=my-eth1ifname=eth1type=ethernetip4=00/24gw4=state=presentautoconnect=true"Ansible常用模塊:AdHoc命令通過模塊執(zhí)行任務(wù)序號模塊名描述主要選項模塊命令示例16uri與HTTP和HTTPSWeb服務(wù)交互,支持摘要、HTTP基本身份驗證機(jī)制和WSSEHTTP身份驗證機(jī)制url:指定要執(zhí)行HTTP請求的URL。user:HTTP身份驗證用戶名。password:HTTP身份驗證密碼。method:請求方法,支持GET、POST、PUT、DELETE、HEAD和OPTIONS等。force_basic_auth:是否強(qiáng)制使用HTTP基本身份驗證。status_code:預(yù)期的HTTP狀態(tài)碼,可用于檢查HTTP請求是否成功。dest:指定下載文件的目標(biāo)路徑ansibletarget-muri-a"url=/file.zipdest=/tmp/file.zip"17blockinfile在文件中添加、修改或刪除塊內(nèi)容path:指定要操作的文件路徑。
block:指定要添加、修改或刪除的文本塊。state:指定文本塊的狀態(tài),可選值為present、absent。marker:用于標(biāo)記開始和結(jié)束位置的字符串。backup:指定是否創(chuàng)建包含時間戳信息的備份文件。insertbefore:指定在哪行之前插入新文本塊。insertafter:指定在哪行之后插入新文本塊。
create:指定是否創(chuàng)建文件ansibletarget-mblockinfile-a"path=/var/www/html/index.htmlmarker='<!--{mark}ANSIBLEMANAGEDBLOCK-->'insertafter='<body>'block='<h1>Welcometo{{ansible_hostname}}</h1>\n<p>Lastupdatedon{{ansible_date_time.iso8601}}</p>'"Ansible常用模塊:AdHoc命令通過模塊執(zhí)行任務(wù)在AdHoc命令中,使用-m選項指定要執(zhí)行的模塊。例如,使用ping模塊來檢查清單文件中的所有受管主機(jī)是否可達(dá),執(zhí)行如下命令:[rhce@control~]$ansibleall-mping上述示例會在所有受管主機(jī)上執(zhí)行ping模塊,以測試主機(jī)之間的網(wǎng)絡(luò)連接性。當(dāng)Ansible運行模塊時,它將在遠(yuǎn)程主機(jī)上自動部署并執(zhí)行模塊代碼,并將結(jié)果返回給控制節(jié)點。在AdHoc命令中,使用yum包管理器,在受管節(jié)點上安裝、更新或刪除軟件包。執(zhí)行如下命令:[rhce@control~]$ansiblewebservers-myum-a"name=httpdstate=present"在上述示例中,-a選項用于傳遞命令行參數(shù)給執(zhí)行的模塊。這些參數(shù)以字符串列表的形式傳遞,且必須使用引號(單引號或雙引號)標(biāo)識,以便將整個字符串列表作為一個參數(shù)傳遞給模塊。如果需要指定多個參數(shù),則以引號標(biāo)識的、空格分隔的列表形式提供。[rhce@control~]$ansiblewebservers-mfile-a"path=/path/to/test/docmode=755owner=rhcegroup=rhcestate=directory"03查看模塊文檔信息查看模塊文檔信息模塊是Ansible自動化管理中的重要組成部分。自動化運維工程師需要熟悉和掌握模塊的功能和使用方法,才能高效地控制遠(yuǎn)程主機(jī)執(zhí)行自動化任務(wù)。Ansible提供了ansible-doc命令行工具,可以幫助用戶快速查找模塊的參數(shù)、使用方法、示例等,方便用戶快速了解模塊的功能和使用方法,以及編寫正確的AnsiblePlaybook來完成各種自動化任務(wù)。ansible-doc命令的基本語法如下:ansible-doc[options]module_name其中,module_name表示要查詢的模塊名稱,可以是Ansible自帶的模塊,也可以是自定義的模塊。查看模塊文檔信息序號參數(shù)或選項描述1-l、--list列出所有可用的模塊名稱2-F、--list-files顯示所有插件名稱及其源文件,不包括摘要信息3-t{TYPE}、--type{TYPE}指定要查看的插件類型??捎玫牟寮愋桶╞ecome、cache、callback、cliconf、connection、httpapi、inventory、lookup、netconf、shell、vars、module、strategy、test、filter、role和keyword等4-s、--snippet顯示指定類型插件的示例代碼片段??捎妙愋桶╥nventory、lookup和module等5-rROLES_PATH、--roles-pathROLES_PATH指定角色所在的目錄路徑6-MMODULE_PATH、--module-pathMODULE_PATH在默認(rèn)的插件路徑之前添加自定義插件路徑,多個路徑使用冒號分隔常用的ansible-doc命令參數(shù)或選項如表所示:查看模塊文檔信息要查詢yum模塊的文檔信息,可以使用以下命令:ansible-docyum。該命令將輸出yum模塊的文檔信息,包括模塊的參數(shù)、示例等。ansible-doc命令輸出的模塊文檔信息中主要字段如表所示:序號字段描述1NAME模塊名稱2SYNOPSIS模塊的語法格式和參數(shù)3DESCRIPTION模塊的詳細(xì)描述和用途4OPTIONS模塊的選項和參數(shù),包括常用選項和高級選項5RETURN模塊的返回值類型和描述6EXAMPLES模塊的使用示例7AUTHORS模塊的作者和貢獻(xiàn)者8COPYRIGHT版權(quán)信息查看模塊文檔信息顯示所有可用的模塊:ansible-doc-l將文檔輸出為JSON格式:ansible-doc-jfile顯示某個特定插件的文檔,如template模板的文檔:ansible-doc-tmoduletemplate列出某個特定集合的所有插件:ansible-doc-lcommunity.docker顯示某個特定插件的源文件路徑:ansible-doc-Fcommunity.docker查看所有可用的過濾器(filter)插件及其摘要信息:ansible-doc-tfilter–list查看to_nice_json過濾器的文檔信息:ansible-doc-tfilterto_nice_json顯示所有可用的回調(diào)(callback)插件:ansible-doc-tcallback--list顯示名為profile_tasks的回調(diào)插件的文檔信息:ansible-doc-tcallbackprofile_tasks查詢file模塊(module)的文檔信息,包括模塊的參數(shù)、示例用法等:ansible-doc-tmodulefile謝謝AnsiblePlaybook基本語法任務(wù)2:YAML與JSON基本格式目錄/Contents01YAML基本格式02JSON基本格式01YAML基本格式在Ansible中,YAML常用于編寫Playbook、清單文件、變量、角色等,它可使Playbook和清單文件更加易于閱讀和理解,能幫助用戶輕松地部署和維護(hù)復(fù)雜的自動化任務(wù)。01除了在Ansible中使用之外,YAML還用于Kubernetes資源部署、GitHub源碼控制中的跟蹤和審計變更等。02YAML擁有Perl、C、XML、HTML和其他編程語言的特性。YAML也是JSON的超集,所以JSON文件在YAML中有效。YAML使用Python風(fēng)格的縮進(jìn)來表示嵌套,不能使用制表符,推薦使用空格來代替。03YAML簡介YAML是一種輕量級的數(shù)據(jù)序列化語言,其語法類似Python,使用縮進(jìn)和換行來表示結(jié)構(gòu)層次關(guān)系,不需要使用標(biāo)簽或者屬性來標(biāo)記數(shù)據(jù)。相對于XML和JSON等格式,YAML格式更加緊湊和簡潔。YAML基本語法在YAML文件中,3個短橫線(---)表示文檔分隔符,用于將一個文件分成多個YAML文檔。每個文檔以單個短橫線(-)開頭,表示一個序列(列表),或以鍵值對的形式表示一個映射(字典)。使用3個短橫線可以將多個文檔組合到一個文件中,每個文檔之間用3個短橫線分隔。例如,以下是一個包含兩個文檔的YAML文件示例:---name:Johnage:30---name:Janeage:25在YAML文件中使用3個短橫線并不是必需的,特別是在只有一個YAML文檔的情況下。但是,如果需要在同一個文件中包含多個YAML文檔,使用3個短橫線可以使它們更易于管理和處理。使用YAML格式編寫文件時,可以使用映射和列表這兩種結(jié)構(gòu)來組織數(shù)據(jù)。映射數(shù)據(jù)結(jié)構(gòu)映射是一種用于表示鍵值對的數(shù)據(jù)結(jié)構(gòu),類似于字典或哈希表。通常使用冒號(:)來將鍵和值分隔開,其中每個鍵必須唯一,冒號和值之間的空格也是必需的。例如,下面是一個簡單的YAML映射示例:name:JohnSmithage:30email:john@在這個示例中,name是鍵,對應(yīng)的值是字符串JohnSmith;age是鍵,對應(yīng)的值是整數(shù)30;email是鍵,對應(yīng)的值是字符john@。映射數(shù)據(jù)結(jié)構(gòu)在YAML文件中使用映射時,可以通過縮進(jìn)來表示層次結(jié)構(gòu),YAML對縮進(jìn)的空格數(shù)量沒有嚴(yán)格的要求,但有兩個基本規(guī)則。同一層級的元素(鍵值對或子映射)必須使用相同數(shù)量的空格進(jìn)行縮進(jìn),以表示它們處于相同的層次結(jié)構(gòu)級別。子映射的縮進(jìn)必須大于其父映射,以明確表示層次結(jié)構(gòu)關(guān)系。映射也可以嵌套,以表示更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如:person:name:JohnSmithage:30contact:email:john@phone:555-123456在這個示例中,person和contact是頂級映射的鍵,它們有相同的縮進(jìn)級別。而name、age、email和phone是每個映射的鍵對應(yīng)的值,它們相對于各自映射鍵進(jìn)行縮進(jìn)。列表數(shù)據(jù)結(jié)構(gòu)列表由一組項目組成,每個項目可以是任何YAML數(shù)據(jù)結(jié)構(gòu),包括映射或列表。列表使用短橫線(-)來標(biāo)記每個項目,并使用縮進(jìn)來表示層次結(jié)構(gòu)。例如,下面是一個簡單的YAML列表示例:-JohnSmith-JaneDoe-BobJohnson在這個示例中,定義了一個包含3個項目的列表,分別是JohnSmith、JaneDoe和BobJohnson。列表數(shù)據(jù)結(jié)構(gòu)與映射不同,列表包含一組按照特定順序排列的值,它可以包含任意數(shù)量的所需項目。在YAML文件中使用列表時,使用短橫線和空格來開始一個新的項目,并使用縮進(jìn)來表示層次結(jié)構(gòu)。例如,下面是一個包含列表的YAML文件示例:fruits:-apple-orange-banana在這個示例中,定義了一個名為fruits的映射,它包含一個名為fruits的列表。列表中包含3個項目,即apple、orange和banana。項目使用短橫線和空格來標(biāo)記,并使用縮進(jìn)來表示層次結(jié)構(gòu)。YAML文件的數(shù)據(jù)結(jié)構(gòu)可以是映射或列表。映射用于關(guān)聯(lián)鍵值對,列表用于包含項目。它們可以嵌套和組合使用,以創(chuàng)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。02JSON基本格式最常見的JSON應(yīng)用場景之一是在不同系統(tǒng)之間進(jìn)行數(shù)據(jù)交換。廣泛用于Web應(yīng)用程序和移動應(yīng)用程序之間的數(shù)據(jù)交換。01在Ansible中,可以使用JSON格式的數(shù)據(jù)來定義變量、模板等,還可以用JSON格式的數(shù)據(jù)作為模塊的輸入和輸出。例如,可以使用JSON格式的數(shù)據(jù)作為shell模塊的命令參數(shù)和返回值。02JSON的基本語法是鍵值對,用于表示一個對象。鍵與值之間用冒號分隔,每個鍵值對之間用逗號分隔,并使用花括號標(biāo)識。03JSON是一種輕量級的數(shù)據(jù)交換格式,由于其簡單、易于解析和支持跨平臺等特點,它被廣泛應(yīng)用于各種場景中。JSON簡介JSON基本格式在下面的示例中,對象的名稱是person,對應(yīng)的值是一個嵌套的對象。name、age和city是鍵,分別對應(yīng)字符串John、數(shù)字30和字符串ShangHai。"person":{"name":"John","age":25,"address":{"street":"MainStreet","city":"NewYork"}}}在JSON對象中,值可以是基本數(shù)據(jù)類型(如字符串、數(shù)字、布爾值),也可以是數(shù)組,數(shù)組通常用于表示一組相同類型的數(shù)據(jù),它們使用方括號標(biāo)識,并用逗號分隔每個元素。在下面的示例中,fruits是鍵,值是一個包含3個字符串的數(shù)組。{"fruits":["apple","banana","orange"]}謝謝AnsiblePlaybook基本語法任務(wù)3:Playbook基本格式目錄/Contents010203編寫并運行Playbook提高輸出的詳細(xì)程度語法驗證01編寫并運行PlaybookPlaybook簡介AnsiblePlaybook是一種用YAML格式編寫的自動化代碼文件,它可以在無須人工干預(yù)或有限人工干預(yù)的前提下,通過預(yù)先編寫的代碼來執(zhí)行復(fù)雜的IT操作。Playbook可以對一組或一類共同構(gòu)成Ansible清單文件的主機(jī)進(jìn)行操作,常用于IT基礎(chǔ)設(shè)施的自動化場景,涵蓋基礎(chǔ)架構(gòu)、網(wǎng)絡(luò)設(shè)備、安全合規(guī)、應(yīng)用部署等,可實現(xiàn)可擴(kuò)展、高效、一致的自動化操作。Playbook可以稱為劇本,通常包含一個或多個play。play則是Playbook中的一個場景,用于描述一組相關(guān)任務(wù),并指定要在哪些主機(jī)上執(zhí)行任務(wù)。每個play有一個或多個任務(wù)(task,即在目標(biāo)主機(jī)上執(zhí)行的特定任務(wù)),每個任務(wù)執(zhí)行一個具有特定參數(shù)的模塊,在Playbook中,可以使用變量、條件語句、循環(huán)語句等,還可以包含其他文件,以實現(xiàn)更靈活和復(fù)雜的自動化任務(wù)和部署場景。運行Playbook下面是簡單的Playbook示例:----name:PLAY-1Deployingapachehttpdwebserviceshosts:tasks:-name:P1Task-1InstallthelatestversionofApacheyum:name:httpdstate:latest-name::P1Task-2InstallthelatestversionofApachedebug:msg:-“SuccessInstallApacheWebServerInfo”-name:PLAY-2Deployingnginxwebserviceshosts:tasks:-name::P2Task-1InstallthelatestversionofNginxyum:name:nginxstate:latest第1個Playbook起始符Play1模塊名模塊名模塊名Task1Task2Task1Play2在示例中,Playbook開頭的一行由3個短橫線(---)組成,3個短橫線是一種常用的分隔符,可將Playbook分成多個獨立的部分。在這個示例中,有一個Playbook,Playbook包含兩個play。在其他場景中,Playbook末尾可能使用3個圓點(...)作為文檔結(jié)束標(biāo)記,但在實踐中通常會省略。在Playbook示例中,---后的行以短橫線開頭,然后列出play列表中第一個play。每個play都以短橫線和空格開頭,表示該play是Playbook中的一個項目。每個play有3個相同縮進(jìn)的鍵:name、hosts和tasks。運行Playbookplay中的第二個鍵是hosts屬性,它用于指定運行play中的任務(wù)的主機(jī),hosts屬性將主機(jī)或主機(jī)名稱作為值,如清單文件中受管主機(jī)或組的名稱。play中的最后一個鍵是tasks屬性,其值用于指定要為該play運行的任務(wù)的列表。Playbook示例中第一個play只有一項任務(wù),該任務(wù)使用特定參數(shù)運行yum模塊以安裝httpd軟件包。play的第一個鍵是name屬性,它將一個任意字符串作為標(biāo)簽與該play關(guān)聯(lián)。name鍵雖然是可選的,但建議使用,因為它標(biāo)識了play的用途,特別是當(dāng)Playbook包含多個play時,使用name屬性可以幫助用戶更好地了解每個play的功能和作用。-name:Deployingwebserviceshosts:tasks:-name:InstallthelatestversionofApacheyum:name:httpdstate:latest運行PlaybookPlaybook是以YAML格式編寫的文本文件,如需表達(dá)更為復(fù)雜的配置和自動化任務(wù),可使用映射和列表組合的數(shù)據(jù)結(jié)構(gòu)。#服務(wù)器配置-server1:os:openEuler22services:-apache-mysql-sshusers:-username:huaweihome_dir:/home/huaweigroups:-admin-developersssh_keys:-ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAAB-username:janehome_dir:/home/janegroups:-adminssh_keys:-ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAAC在示例中,每個服務(wù)器都以其名稱作為字典鍵,并以操作系統(tǒng)、服務(wù)和用戶列表作為字典值,每個用戶又以其用戶名作為字典鍵,并以主目錄、組和SSH密鑰列表作為字典值。Playbook中play和任務(wù)列出的順序很重要,因為Ansible會按照相同的順序運行任務(wù)。在編寫Playbook時,需要仔細(xì)考慮任務(wù)列表的順序,以確保所有任務(wù)都按照正確的順序運行,并且Playbook能夠?qū)崿F(xiàn)預(yù)期的效果。運行Playbookansible-playbook命令可用于運行playbook。該命令在控制節(jié)點上執(zhí)行,要運行的Playbook的名稱則作為參數(shù)傳遞,基本格式如下:在運行Playbook時,將輸出所執(zhí)行的play和任務(wù)。輸出中也會報告執(zhí)行的每一項任務(wù)的結(jié)果,以下示例顯示了一個簡單的Playbook內(nèi)容,以及其運行結(jié)果:ansible-playbook[options]playbook.yml[rhce@control~]$catset-firewall.yml----name:Configurefirewalldruleshosts:tasks:-name:Redirectport443to8443withRichRuleansible.posix.firewalld:rich_rule:rulefamily=ipv4forward-portport=443protocol=tcpto-port=8443zone:publicpermanent:trueimmediate:truestate:enabled運行Playbook[rhce@control~]$ansible-playbookset-firewall.ymlPLAY[Configurefirewalldrules]*******************************************************TASK[GatheringFacts]*****************************************************************ok:[]TASK[Redirectport443to8443withRichRule]****************************************ok:[]PLAYRECAP*****************************************************************************
:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0在AnsiblePlaybook運行時,每個play和任務(wù)的名稱都會在屏幕上顯示。GatheringFacts任務(wù)是一項特殊的任務(wù),setup模塊通常在play啟動時自動運行此任務(wù)以收集有關(guān)目標(biāo)主機(jī)的信息。對于含有多個play和任務(wù)的Playbook,設(shè)置任務(wù)名稱可以使監(jiān)控Playbook的執(zhí)行進(jìn)度變得更加容易。在任務(wù)完成后,如果目標(biāo)主機(jī)的狀態(tài)發(fā)生了變化,Ansible會將任務(wù)的狀態(tài)標(biāo)記為changed,表示任務(wù)更改了主機(jī)上的某些設(shè)置,使其符合規(guī)格要求。通常情況下,AnsiblePLaybook中的任務(wù)是冪等的,冪等性是指無論任務(wù)運行多少次,系統(tǒng)的狀態(tài)都保持一致,即任務(wù)的效果只會發(fā)生一次,再次運行任務(wù)不會對系統(tǒng)產(chǎn)生額外的影響。冪等性是Ansible的一個關(guān)鍵特性,它確保在重復(fù)運行Playbook時,每個任務(wù)只會在需要時執(zhí)行,而且只會執(zhí)行必要的操作來實現(xiàn)所需的狀態(tài),而不會執(zhí)行多余的操作。02提高輸出的詳細(xì)程度提高輸出的詳細(xì)程度ansible-playbook命令的默認(rèn)輸出不提供詳細(xì)的任務(wù)執(zhí)行信息。ansible-playbook-v命令提供了額外的信息,共有4個級別。Playbook執(zhí)行的輸出詳細(xì)程度選項如表所示:序號選項描述1-v默認(rèn)級別,顯示基本的任務(wù)執(zhí)行信息2-vv顯示任務(wù)執(zhí)行結(jié)果和任務(wù)配置3-vvv顯示關(guān)于與受管主機(jī)連接的信息4-vvvv顯示SSH通信的所有詳細(xì)信息、調(diào)試信息和錯誤消息。增加了連接插件相關(guān)的額外詳細(xì)程度選項,可顯示包括受管主機(jī)上執(zhí)行腳本的用戶以及所執(zhí)行的腳本等信息03語法驗證語法驗證在使用ansible-playbook命令運行Playbook之前,可以使用--syntax-check選項對Playbook的語法進(jìn)行驗證,以確保其正確無誤。在執(zhí)行PLaybook之前,最好進(jìn)行驗證,以確保其語法正確無誤。ansible-playbook命令提供了--syntax-check選項,可用于驗證Playbook的語法。下面演示一個Playbook成功通過語法驗證。[rhce@control~]$ansible-playbook--syntax-checkwebserver.ymlplaybook:webserver.yml語法驗證syntax-check上述示例演示了一個Playbook語法驗證失敗而輸出信息,包括JSON和YAML解析錯誤,同時指出了錯誤所在的文件、行數(shù)、列數(shù)和具體問題,具體問題是set-firewall.yml文件第7行第29列處的rich_rule錯誤。語法驗證失敗時,將報告語法錯誤。輸出中也包含語法問題在Playbook中的大致位置。[rhce@contro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲租賃合同范本
- 能源站施工協(xié)議
- 高層建筑自來水安裝合同
- 幼兒園專車定時接送合同
- 行紀(jì)合同范本指南制作教程
- 商標(biāo)糾紛保證金協(xié)議書
- 生態(tài)園化糞池施工合同
- 保險服務(wù)辦公室租賃合同模板
- xx區(qū)分布式光伏項目可行性研究報告
- 辦公用品庫房管理招聘合同
- 如何創(chuàng)造有意義的人生
- 冬季如何預(yù)防腦卒中
- 安檢基礎(chǔ)知識課件
- 習(xí)思想教材配套練習(xí)題 第一章 新時代堅持和發(fā)展中國特色社會主義
- 現(xiàn)代禮儀饋贈禮儀課件
- 病案室防蟲應(yīng)急預(yù)案演練腳本
- 目標(biāo)導(dǎo)向的教學(xué):七年級英語第一單元教案
- 部編版一年級下冊道德與法治第3課《我不拖拉》教案(含2課時)
- 數(shù)學(xué)與藝術(shù)的結(jié)合探索數(shù)學(xué)和藝術(shù)之間的聯(lián)系和美妙
- 眼科護(hù)理的國內(nèi)外發(fā)展動態(tài)和趨勢
- GB/T 43564-2023中小學(xué)合成材料面層田徑場地
評論
0/150
提交評論