




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Linux自動化運維項目9:自動化任務控制
學習目標【知識目標】了解loop循環語句和when條件語句基本概念。了解處理程序基本概念。了解任務失敗條件判斷基本結構。了解任務分組和任務標記基本概念?!炯寄苣繕恕空莆昭h語句基本語法,能夠使用loop關鍵字完成循環任務。掌握條件語句基本語法,能夠使用when關鍵字完成條件任務。掌握處理程序基本語法,能夠使用handlers關鍵字完成任務處理。掌握任務失敗條件判斷,能夠完成失敗任務的控制處理。掌握任務分組方法,能夠使用block、rescue、always關鍵字完成任務控制。【素質目標】培養讀者的團隊合作精神、協同創新能力,使其能夠在團隊中積極合作、有效溝通。培養讀者的獨立思考能力和邏輯思維能力,使其能夠運用邏輯思維解決復雜問題。自動化任務控制任務1:循環語句目錄/Contents0102簡單的列表循環字典循環01簡單的列表循環簡單的列表循環循環語句是一種用于重復執行某個任務或操作的結構,它允許使用者在任務中對一組對象進行迭代操作,以便在每個迭代周期中執行相同的任務。對于需要重復執行相同操作的場景,循環語句可以大大提高工作效率。Ansible支持多種類型的循環語句,涉及loop、with_×和until等關鍵字,在Ansible2.4及之前的版本中,with_×關鍵字是用于循環迭代的通用關鍵字,可以與不同的插件結合使用,以便在任務中迭代不同的對象。在Ansible2.5及之后的版本中,with_×關鍵字被loop關鍵字所取代。在較新版本的Ansible中,推薦使用loop關鍵字進行循環迭代,并結合loop_control和loop_var關鍵字以及lookup、query插件來實現復雜的循環需求。簡單的列表循環loop關鍵字用于執行循環語句的基本語法如下:其中,module_name用于指定要執行的模塊名稱,module_parameter用于指定模塊的參數名,{{item}}表示對列表中的每個元素進行迭代,并將其作為參數傳遞給模塊。loop關鍵字指定要迭代的數據結構,可以是列表或字典等數據結構。-name:Executetaskwithaloop<module_name>:<module_parameter>:"{{item}}"loop:-value1-value2簡單的列表循環loop循環語句是一種用于重復執行任務的控制結構,它允許對一個列表或數組進行迭代,并在每次迭代中執行一組任務。循環的變量可以在變量文件中定義,或者在vars關鍵字部分中定義,然后在任務中引用列表變量的名稱。-name:Loopingoveralistofitemshosts:allvars:packages:-nginx-mysql-redistasks:-name:Createdirectoryfile:path:"/tmp/{{item}}"state:directoryloop:-dir1-dir2-name:Createfilecopy:content:"Thisis{{item}}file"dest:"/tmp/{{item}}/file.txt"loop:-dir1-dir2-name:Installpackagesyum:name:"{{item}}"state:presentloop:"{{packages}}"在示例中,loop關鍵字用于迭代一個包含兩個目錄名稱的字符串列表,并將列表中每個元素作為item變量的值傳遞給3個任務。第1個任務使用file模塊創建一個目錄,并使用item變量構建目錄路徑。第2個任務使用copy模塊在每個目錄中創建一個文件,并使用item變量構建文件路徑和內容。第3個任務使用yum模塊安裝軟件包,vars關鍵字定義了一個列表變量packages,它是一個包含3個軟件包名稱的列表,在任務中使用loop循環語句在所有主機上依次安裝這3個軟件包。簡單的列表循環由于service模塊不支持變量列表,如果需要啟動10個模塊,普通的編寫方式需要10個任務,但使用loop循環語句后就可以提供自動化任務。vars:web_services:-nginx-httpdtasks:-name:NginxandHttpdarerunningservice:name:"{{item}}"state:startedloop:"{{web_services}}"loop循環語句和item密切相關,loop關鍵字用于迭代一個列表,并將列表中的每個元素作為item變量的值傳遞給任務。在每次循環迭代中,item變量都會被設置為列表中的當前元素。在以下示例中,變量web_services含有需要處于運行狀態的服務的列表。02字典循環字典循環在循環任務中,可使用loop關鍵字遍歷字典并訪問其鍵和值,每次循環迭代都會將一個包含key和value的字典作為item變量的值傳遞給任務。在下面的任務中,loop循環語句會使用item.key和item.value分別引用字典中的鍵和值,以輸出每個鍵值對。上述示例中的user_data字典變量,使用dict2items
過濾器將其轉換為適用于循環的列表結構。loop循環語句會將以下兩個鍵值對分別作為user_data變量的值傳遞給任務。----name:Loopthroughdictionaryvariablehosts:localhostvars:user_data:username:devgroupname:wheeltasks:-name:Iteratingoveralistofhashesbykeyandvaluedebug:msg:"{{item.key}}is{{item.value}}"loop:"{{user_data|dict2items}}"字典循環在較新版本的Ansible中,loop關鍵字與loop_control
關鍵字結合可以更精細地控制循環行為,比如自定義循環變量名標簽、循環迭代之間的暫停時間等。loop循環語句會將以下兩個鍵值對分別作為user_data變量的值傳遞給任務。[{"key":"username","value":"dev},{"key":"groupname","value":"wheel"}]----name:Loopthroughdictionaryvariablehosts:localhosttasks:-name:printdictionaryvariablebyloopdebug:msg:"Filenameis/etc/{{file_name}},Filemodeis{{mode}}“loop:-{file_name:'passwd',mode:'0644'}-{file_name:'shadow',mode:'0600'}loop_control:loop_var:file_itemvars:file_name:"{{file_item.file_name}}"mode:"{{file_item.mode}}"在示例中,loop用于遍歷一個包含兩個字典的列表,每個字典表示一個文件的信息(文件名和文件模式)。{file_name:'passwd',mode:'0644'}和{file_name:'shadow',mode:'0600'}:這兩個字典分別表示兩個文件的信息,包含文件名和文件模式。loop_control指定了循環變量的名稱為file_item,這樣在循環體內就可以使用file_item來引用當前循環的元素。Vars定義了兩個本地變量file_name和mode,它們分別從循環變量file_item中獲取每個文件的文件名和文件模式。謝謝自動化任務控制任務2:條件語句目錄/Contents010203條件表達式根據事實信息設置條件
根據注冊變量設置條件04
在循環中設置條件01條件表達式條件表達式條件語句可以根據不同的條件選擇性地執行任務或操作。在Playbook中,條件語句可以基于事實、變量、前一個任務的結果進行評估,通過控制任務執行的條件來實現更加靈活的自動化。條件語句由條件及其相應的任務列表組成,條件用于檢查變量的值,任務列表包含條件為true時執行的任務。常用的條件語句涉及when、failed_when、changed_when等關鍵字。when條件語句的基本語法如下:-name:Taskname<module>:<module_options>when:<expression>其中,when條件語句被添加到任務中,以便在任務執行之前對條件進行評估,如果條件為true,則任務將被執行,如果條件為false,則任務將被跳過;name表示任務的名稱,用于標識任務;module表示要執行的模塊的名稱;module_options表示要傳遞給模塊的參數,可以根據需要添加多個參數;expression表示一個Jinja2表達式,可以是變量、模塊返回值、算術運算、比較運算等,如果表達式的結果為true,則任務會被執行,否則任務會被跳過。條件表達式when條件語句使用Jinja2表達式來決定任務是否執行,用戶可根據需要添加多個表達式進行判斷,還可使用and和or運算符連接多個表達式,以實現更復雜的條件判斷。常用的條件表達式如表所示:序號條件表達式描述1when:var_name==value當變量值等于給定值時,條件為true2when:var_name>value當變量值大于給定值時,條件為true3when:var_name<value當變量值小于給定值時,條件為true4when:var_name>=value當變量值大于或等于給定值時,條件為true5when:var_name<=value當變量值小于或等于給定值時,條件為true6when:var_name!=value當變量值不等于給定值時,條件為true7when:var_nameisdefined當變量已定義時,條件為true條件表達式序號條件表達式描述8when:var_nameisundefined如果變量未定義,則條件表達式為true,否則為false9when:var_nameistrue當變量為true時,條件為true10when:var_nameisfalse當變量為false時,條件為true11when:var_nameinlist當變量值包含在給定列表中時,條件為true12when:notvar_name當變量為false或未定義時,條件為true13when:condition1andcondition2當condition1和condition2都為true時,條件為true14when:condition1orcondition2當condition1或condition2中任意一個為true時,條件為true15when:(condition1andcondition2)orcondition3當condition1和condition2都為true,或條件3為true時,條件為truewhen條件語句使用Jinja2表達式來決定任務是否執行,用戶可根據需要添加多個表達式進行判斷,還可使用and和or運算符連接多個表達式,以實現更復雜的條件判斷。常用的條件表達式如表所示:條件表達式在when條件語句中,條件表達式可以直接調用變量,而無須使用{{}}這樣的Jinja2模板語言的語法。when條件語句會自動將其條件表達式中的變量進行替換,而變量替換過程會自動應用Jinja2的模板語言,將變量的值插入條件表達式。when條件表達式示例如下:-name:Configurefileifitexistscopy:src:path/to/filedest:/etc/filewhen:path/to/fileisexists-name:Configureserviceifvariableisdefinedservice:name:service-namestate:startedwhen:variable-nameisdefined-name:Configureserviceifvariableequalsaspecificvalueservice:name:service-namestate:startedwhen:variable-name=="specific-value"-name:Updateaptcacheapt:update_cache:yeswhen:ansible_distribution=='Ubuntu'-name:Startnginxservice:name:nginxstate:startedwhen:'localhost'inweb_servers02根據事實信息設置條件根據事實信息設置條件在Playbook中,用戶希望根據主機的屬性來執行或跳過任務,這些屬性被稱為主機的事實信息,包括IP地址、操作系統版本、文件系統的狀態等。使用基于事實信息的條件語句,可以實現在特定版本的操作系統上安裝軟件包,根據系統內存容量進行條件判斷,僅當主機的總內存大于或等于8192MB時才執行安裝MySQL的任務:-name:InstallMySQLonhigh-memorymachinesyum:name:mysql-serverstate:presentwhen:ansible_memtotal_mb|int>=8192根據事實信息設置條件根據CPU核心數進行條件判斷,僅當主機的CPU核心數量大于或等于4時才執行輸出消息的任務:根據操作系統信息進行條件判斷,僅當系統發行版為RedHat或CentOS時才執行啟動Apache服務的任務。:-name:CheckCPUcoresdebug:msg:"Systemhasatleast4CPUcores"when:ansible_processor_vcpus|int>=4-name:StartApacheservice:name:httpdstate:startedwhen:ansible_distribution=='RedHat'oransible_distribution=='CentOS'根據事實信息設置條件根據操作系統信息和版本號進行條件判斷:-name:ShutdownCentOS6systemscommand:/sbin/shutdown-tnowwhen:-ansible_facts['distribution']=="CentOS"-ansible_facts['distribution_major_version']=="7"-name:CheckOSversiondebug:msg:"OSversionisgreaterthanorequalto7"when:ansible_facts['distribution_major_version']|int>=7-name:DosomethingonRedHatshell:some_commandwhen:ansible_distribution|lower=='redhat'在示例中,第1個when條件,系統發行版為CentOS,CentOS的主要版本號為6。第2個when條件,需要滿足操作系統主要版本號大于或等于。第3個when條件,需要滿足操作系統發行版為RedHat。03根據注冊變量設置條件根據注冊變量設置條件在Playbook中,通常需要根據之前任務的執行結果來執行或跳過后續任務。通過register關鍵字將任務的執行結果賦值給一個變量。在后續的任務中,可以根據這個變量的值來設置條件,從而控制任務是否執行。注冊變量條件判斷示例如下:----name:conditionregisterhosts:tasks:-name:Checkifpackageisinstalledshell:rpm-qahttpdregister:package_installed-name:Printregistervardebug:var:package_installed-name:Checkwhetherthesoftwarepackageisinstalledbyrcdebug:msg:Thispackageisinstalledwhen:package_installed.rc|int==0-name:Checkwhetherthesoftwarepackageisinstalledbystdoutdebug:msg:Thispackageisinstalledwhen:package_installed.stdout.find('httpd')==0在上述示例中,第1個任務使用register關鍵字將命令輸出結果存儲在注冊變量package_installed中;第2個任務使用debug模塊輸出注冊變量結果。第3個任務通過when條件語句進行判斷,rc表示命令執行的返回狀態碼,如果命令執行成功則rc為0,否則為其他值。語句中的int是一個jinja2過濾器,表示將變量的值轉換為整數,因為變量的值是字符串,如果不進行轉換會導致判斷條件出錯。第4個任務通過when條件語句進行判斷,該語句使用了stdout.find方法,該方法用于查找字符串中是否包含指定的子字符串httpd,如果返回值為0,則說明字符串中包含子字符串“httpd”;否則返回-1。04在循環中設置條件在循環中設置條件在AnsiblePlaybook中,可以使用when條件語句在循環語句中對每個項進行條件判斷。這種方式可以根據條件來決定是否處理某些特定的項,或者在處理每個項時使用不同的參數。在循環中使用when條件語句示例如下:在上述示例中,定義了一個包含3個用戶的列表,對每個用戶執行loop循環語句以創建用戶,并設置when條件語句,僅在用戶uid大于1001時才執行該任務,任務執行結果是bob和alex用戶被創建,tom用戶因uid不符合條件沒有被創建。----name:Loopwithconditionalshosts:vars:users:-name:tomuid:1001-name:bobuid:1002-name:alexuid:1003tasks:-name:Createuseraccountsuser:name:"{{}}"uid:"{{item.uid}}"loop:"{{users}}"when:item.uid>1001謝謝自動化任務控制任務3:實施處理程序目錄/Contents0102定義處理程序監聽處理程序01定義處理程序定義處理程序處理程序是響應由其他任務觸發的通知的任務,僅當任務在受管主機上更改了某些內容時,任務才通知其處理程序。每個處理程序都具有全局唯一的名稱,在Playbook中任務塊的末尾觸發。如果沒有任務通過名稱通知處理程序,處理程序就不會運行。Ansible處理程序使用handlers關鍵字來定義,其基本語法與Playbook任務定義的類似,每個處理程序必須具有唯一的名稱,并且必須與通知的名稱相匹配,每個處理程序都包含一個名稱和一個或多個任務。定義處理程序在上述示例中,當task1任務執行后,如果引起了受管主機狀態更改,那么notify會通知任務名稱為handlertask1的處理程序來執行相應的操作。tasks:-name:task1<module_name>:<module_arguments>notify:handlertask1handlers:-name:handlertask1<module_name>:<module_arguments>handlers通常與notify關鍵字一起使用,當任務引起主機狀態更改時,可以使用notify關鍵字通知一個或多個處理程序執行特定操作。處理程序的基本語法如下所示:定義處理程序處理程序可以視為非活動任務,即只有在使用notify語句顯式調用時才會觸發,這樣做可以確保handlers只有在需要時才會被執行,從而不會影響任務的執行順序。任務處理程序如下所示:tasks:-name:Templateconfigurationfiletemplate:src:template.j2dest:/etc/foo.confnotify:-Restartapache-Restartmemcachedhandlers:-name:Restartmemcachedservice:name:memcachedstate:restarted-name:Restartapacheservice:name:httpdstate:restarted在示例中,Templateconfigurationfile任務使用template模塊將template.j2模板文件渲染為/etc/foo.conf文件,如果任務執行成功,將觸發名為Restartapache和Restartmemcached的兩個處理程序,處理程序使用service模塊來重啟memcached和httpd服務。02監聽處理程序監聽處理程序在Ansible中,處理程序必須被命名,這樣notify關鍵字才能通知這些處理程序執行任務。如果多個處理程序使用相同的名稱,notify關鍵字僅會通知最后一個定義的處理程序,之前的處理程序將被覆蓋。listen關鍵字可以用于定義一個或多個監聽器,讓多個處理程序監聽同一個事件,當任務完成時,監聽器將會被觸發,以便執行相應的處理程序。與notify關鍵字不同,listen關鍵字不需要與任務名稱關聯。監聽處理程序tasks:-name:Restarteverythingcommand:echo"thistaskwillrestartthewebservices"notify:"restartwebservices"handlers:-name:Restartmemcachedservice:name:memcachedstate:restartedlisten:"restartwebservices“-name:Restartapacheservice:name:apachestate:restartedlisten:"restartwebservices"在下面的示例中,使用notify關鍵字觸發名稱為restartwebservices的監聽事件時,所有監聽該事件的處理程序都將被執行,無論這些處理程序的名稱如何命名。通過listen創建監聽事件,可以將處理程序與其名稱解耦,這使得觸發多個處理程序以及在角色和Playbook之間共享處理程序變得更加高效。謝謝自動化任務控制任務4:任務失敗和異常處理目錄/Contents010203忽略錯誤任務失敗強制執行處理程序
指定任務失敗條件04
強制任務失敗05
指定任務報告changed狀態01忽略錯誤忽略錯誤錯誤和異常處理是編程語言中的重要機制,主要用于捕捉和處理代碼執行時可能出現的錯誤和異常,并確保程序在出現錯誤或異常情況時能夠正確、穩定地處理問題,從而保證程序的可靠性和健壯性。當執行自動化任務時,Ansible將捕獲任務狀態,通過評估每個任務的狀態,確定任務是成功的還是失敗的。常見的任務狀態如表所示:序號任務狀態描述1ok任務成功完成2changed任務成功完成,但進行了一些更改,例如更新配置文件或安裝軟件包3skipped任務被跳過,因為條件不滿足或者已經執行過相同的任務4failed任務執行失敗,可能是腳本錯誤、連接問題或其他原因導致的5unreachable無法連接到遠程主機,可能是由于網絡問題或主機已下線6ignored任務被忽略,通常是因為其他任務的狀態導致該任務不必執行7rescued當使用block和rescue時,若rescue塊中的任務失敗,Ansible會跳過該塊并將其標記為rescued忽略錯誤通常情況下,當任務失敗時,Ansible會立即終止執行當前play的其余部分,并跳過所有后續任務。但在某些情況下,用戶希望即使任務失敗也繼續執行play,或者有條件地運行其他任務來恢復。為了完成這些操作,Ansible提供了多種處理錯誤和異常的方法。常見的錯誤和異常處理關鍵字如表所示:序號方法描述1fail引發一個失敗,中斷當前任務或play,并提供自定義的錯誤消息。允許在滿足特定條件時明確終止執行,通常與when條件一起使用2ignore_errors忽略執行任務時出現的錯誤并繼續執行后續任務。如果在執行任務時出現錯誤,可以將ignore_errors設置為true以忽略錯誤并繼續執行后續任務3failed_when根據特定條件將任務標記為失敗,當滿足該條件時認為命令或模塊執行失敗,根據任務執行狀態繼續執行后續任務或執行其他操作4changed_when控制任務在何時報告它已進行了更改,Ansible執行任務時,會對遠程系統產生影響,如修改配置文件、安裝軟件包等。任務執行的結果可能導致系統狀態的變化。通過changed_when關鍵字,可以定義一個條件,只有當這個條件滿足時,Ansible才會將任務執行狀態標記為已變更忽略錯誤常見的錯誤和異常處理關鍵字如表所示:序號方法描述5block和rescue將一組任務包裝在一個block塊中,并在遇到錯誤時執行rescue塊中的恢復操作。塊中的任何任務都可能導致錯誤,但是只要有一個任務失敗,就會跳過塊中的其余任務并執行rescue塊中的恢復操作6always指定任務總是運行,即使之前的任務失敗或跳過也會執行當前任務7register將任務的輸出保存到變量中,以便在后續任務中使用,以幫助檢查任務的執行結果,包括檢查任務是否成功、是否發生錯誤等。比如任務失敗,可以使用register中的錯誤信息進行記錄和報告8force_handlers用于指定在play中強制運行錯誤處理程序,即使play因為后續任務失敗而終止也會調用被通知的處理程序9assert檢查任務執行結果是否符合預期,不符合預期時引發錯誤,終止任務的執行10max_fail_percentage允許在指定百分比范圍內容忍失敗的主機數量。如果失敗的主機數超出了指定百分比,則Playbook將被標記為失敗,且后續的任務將不再執行11any_errors_fatal如果設置為true,表示任何一個任務失敗都會導致Ansible立即終止play12ignore_unreachable忽略無法連接的主機的錯誤,并繼續執行其他主機的任務。如果設置為true,表示在連接失敗時不會終止play,而是將任務標記為unreachable13callback_plugins指定錯誤處理回調插件,當出現錯誤時執行自定義的操作,比如發送電子郵件通知定義和引用變量在自動化任務執行過程中可能會遇到各種問題,如連接失敗、命令執行錯誤、模塊調用異常等。任務執行失敗時,默認情況下Ansible會停止在當前主機上執行后續任務。在Ansible中,ignore_errors參數用于忽略任務執行過程中的錯誤并繼續執行Playbook任務。ignore_errors基本語法如下:-name:Sometasksome_module:some_parameter:some_valueignore_errors:true在上述示例中,ignore_errors被設置為true,表示在執行當前任務時如果出現錯誤,Ansible會忽略該錯誤并繼續執行后續任務。02任務失敗強制執行處理程序任務失敗強制執行處理程序當Ansible執行Playbook任務時,如果其中某個任務執行失敗,那么當前主機上的后續處理程序將不會被運行,如果在play中設置force_handlers:true,即使play因為后續任務失敗而終止也會調用被通知的處理程序。處理程序會在任務報告changed時獲得通知,而在任務報告ok或failed時不會獲得通知。force_handlers示例如下:-name:Exampleplaywithforce_handlershosts:allforce_handlers:truetasks:-name:Task1command:/bin/truenotify:restartservice-name:Task2command:/bin/falsehandlers:-name:restartserviceservice:name:myservicestate:restarted在示例中,force_handlers被設置為true,表示無論哪個任務執行失敗,Ansible都會在所有主機上運行restartservice處理程序,并重啟myservice服務。03指定任務失敗條件指定任務失敗條件在任務中使用failed_when關鍵字來指定表示任務已失敗的條件,從而決定是否將任務標記為失敗。failed_when關鍵字使用的必須是一個可解析的表達式,可以使用Jinja2的模板語法和過濾器來定義,當任務輸出的結果匹配failed_when關鍵字指定的條件時,該任務將被標記為失敗,否則,該任務將視為成功。failed_when基本語法如下:在上述示例中,當example-command命令的標準錯誤輸出中出現了FAILED字符串時,任務將被標記為失敗。-name:Exampletaskwithfailed_whencommand:/usr/bin/example-commandregister:command_resultfailed_when:"'FAILED'incommand_result.stderr"04強制任務失敗強制任務失敗fail關鍵字可用于主動觸發任務失敗,當某些條件不滿足時,需要終止Playbook任務運行,并向用戶提供必要的錯誤信息。fail基本語法如下:在上面的示例中,使用stat模塊檢查文件是否存在,并將結果存儲在注冊變量file_stat中。在接下來的任務中,使用fail關鍵字來檢查文件是否存在,當文件不存在時,fail模塊將終止Playbook的運行,并輸出錯誤信息Filedoesnotexist。-name:Checkiffileexistsstat:path:/path/to/fileregister:file_stat-name:Stopplaybookiffiledoesnotexistfail:msg:"Filedoesnotexist"when:notfile_stat.stat.exists05指定任務報告changed狀態指定任務報告changed狀態changed_when條件語句可以定義任務是否對遠程節點進行了變更,用戶可以根據返回代碼或輸出來確定是否應該在Ansible統計信息中報告變更,以及是否應該觸發處理程序。changed_when關鍵字用于定義任務的狀態變化條件,如果任務的執行結果滿足changed_when定義的條件,則任務將被標記為狀態變化。changed_when基本語法如下:tasks:-name:Report'changed'whenthereturncodeisnotequalto2shell:/usr/bin/billybass--mode="takemetotheriver"register:bass_resultchanged_when:"bass_result.rc!=2"-name:Thiswillneverreport'changed'statusshell:wall'beep'changed_when:False在上述示例中,第一個任務使用shell模塊來運行命令,并將命令執行的結果保存在bass_result注冊變量中。changed_when關鍵字用于決定何時標記任務的狀態為changed,如果bass_result.rc的返回值不等于2,則該任務將被標記為changed。第二個任務使用shell模塊來運行命令。因為changed_when關鍵字的默認值為true,即當任務運行并更改了主機的狀態時,將任務標記為changed。該任務中的changed_when關鍵字被設置為false,這意味著無論命令是否更改了主機的狀態,該任務都不會被標記為changed。謝謝自動化任務控制任務4:使用塊和標簽分組任務目錄/Contents0102塊任務標簽任務01塊任務塊任務在Playbook中,塊是對任務進行邏輯分組的子句,可用于控制任務的執行方式。塊中的所有任務都繼承在塊級別應用的指令,除了循壞指令,大多數指令都可以應用于塊級別。應用于塊級別的指令包括when、register、ignore_errors等,這些指令會被塊中包含的任務繼承,而不會影響塊本身。block、rescue、always是一組關鍵字,使用這3個關鍵字來創建任務塊,可以定義任務塊的執行流程,塊中的任務可以共享相同的指令和數據。3個關鍵字如表所示:序號關鍵字描述1block允許在單個任務中定義一組相關任務。所有任務都可以繼承在塊級別應用的指令,使設置任務通用的數據或指令變得更加容易。塊中的任務按照在Playbook中的定義順序逐個執行,如果任何一個任務失敗,則塊中所有的任務都會被跳過2rescue指定當塊中任意任務失敗時,應該執行的任務列表。如果沒有指定rescue任務,則Ansible會停止整個Playbook的執行3always指定不管塊中的任務是否成功,都必須執行的任務列表。通常用于清理操作塊任務在下面的示例中,block表示一個任務塊,用于將多個任務組合在一起,在塊中將執行3個任務,rescue表示一個用于處理block塊中出現的錯誤的塊。如果block塊中的任何一個任務失敗,都會跳轉到rescue塊,并執行其中的任務。always也表示一個任務塊,其中的任務總是會在執行完block塊和rescue塊后執行。tasks:-name:Install,configure,andstartApache
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年6月校園無土栽培區營養液循環維護合同
- 2025上海市房屋建筑修繕及裝修工程施工合同(版)甲種本
- 2024年2月盲文標識凸點高度精確度驗收規范
- 二零二五家裝純設計合同
- 物業轉供電協議合同書模板二零二五年
- 二零二五版鋼結構廠房購銷合同
- 書柜書桌定制合同標準文本
- 二零二五白瑾的離婚協議書
- 國際貿易獨家代理協議
- 2025【長沙兼職勞動合同書】合同樣本
- 陜旅版四年級英語下冊Unit-5-Where-Are-You-Going第2課時課件
- DB32-T 4264-2022 金屬冶煉企業中頻爐使用安全技術規范
- 三 年級下冊音樂課件-剪羊毛|人音版(五線譜)
- 富余水深與船體下沉量的關系
- 三年級下冊數學課件-4.1 整體與部分 ▏滬教版 (15張PPT)
- 愛國主義教育主題班會課件(25張PPT)
- 電氣防爆施工節點做法
- 遠洋航線設計、航法及氣象導航
- 團結就是力量曲譜和歌詞
- 2022年交通管制員年終考核個人工作總結
- 熱鍍鋅螺栓檢測報告
評論
0/150
提交評論