在編寫shell指令碼時,有可能會有這樣的需求,當指令碼執行到某個階段時,需要對某個條件進行判斷,如果條件成立,則立即終止指令碼的執行,在shell指令碼中實現這個需求很簡單,只需要在條件成立時呼叫"exit"命令即可終止指令碼的執行, 那麼在編寫playbook時,如果有類似的需求,我們該怎麼辦呢?
想要在playbook中按照我們的意願中斷劇本的執行,其實也很簡單,我們只需要借助乙個模組即可完成,這個模組就是"fail"模組。
我們知道,在執行playbook時,如果playbook中的任何乙個任務執行失敗,playbook都會停止執行,除非這個任務設定了"ignore_errors: true",在任務沒有設定"ignore_errors: true"的情況下,任務執行失敗後,playbook就會自動終止,而fail模組天生就是乙個用來"執行失敗"的模組,當fail模組執行後,playbook就會認為有任務失敗了,從而終止執行,實現我們想要的中斷效果,來看乙個小示例:
[root@server4 ~]# vim block4.yml如上例所示,上例playbook中一共有4個debug任務,在第2個debug任務之後,我們呼叫了fail模組,那麼我們來執行一下上例playbook,執行後輸出資訊如下[root@server4 ~]# cat
block4.yml
----hosts: testb
remote_user: root
tasks:
-debug:
msg: "1
" -debug:
msg: "2
" -fail:
-debug:
msg: "3
" -debug:
msg: "4
"
從上圖可以看出,當前兩個debug模組輸出了對應的資訊後,playbook報錯了,之後的debug模組並未被呼叫,實現了中斷劇本執行的效果,當執行fail模組時,fail模組預設的輸出資訊為』failed as requested from task』,我們可以通過fail模組的msg引數自定義報錯的資訊,示例如下
當然,上述示例只是為了初步介紹fail模組的用法,我們通常並不會毫無理由的想要去中斷playbook,通常需要對某些條件進行判斷,如果條件滿足,則中斷劇本,所以,fail模組通常與when結合使用,比如,如果之前模組執行後的標準輸出資訊中包含字串』error』,則認為中斷劇本的條件成立,就立即呼叫fail模組,以終斷playbook,示例如下:
上例中,我們使用shell模組故意輸出了乙個包含』error』字串的文字,並且將shell模組執行後的返回值註冊到了變數』 return_value』中,在之後呼叫了fail模組,並對fail模組新增了判斷條件,對應的條件為 「『error』 in return_value.stdout」,這個條件表示shell模組執行後的標註輸出資訊中如果包含』error』字串,則條件成立,其中,'in』關鍵字的用法與 python 中』in』的用法相同,可以使用』in』關鍵字判斷乙個字串是否存在於另乙個字串中,也可以用於判斷乙個特定的值是否存在於列表中,由於shell標準輸出的資訊中的確包含error字串,所以fail模組對應的條件成立,最終呼叫fail模組,playbook終止執行。
不過需要注意的是,當使用"in"或者"not in"進行條件判斷時,整個條件需要用引號引起,並且,需要判斷的字串也需要使用引號引起,所以,使用』in』或者』not in』進行條件判斷時,如下兩種語法是正確的:
when: '"successful" not in return_value.stdout
'when:
"'successful' not in return_value.stdout
"
Ansible常用模組
1.ping模組2.ansible command模組是ansible預設模組,主要用於執行linux基礎命令,可以執行遠端伺服器命令執行 任務執行等操作。但command模組不支援變數 重定向 管道符等,這些操作需要用shell模組執行 command模組使用詳解 chdir 執行命令前,切換到目...
Ansible模組詳解
上面我們已經提到過 ansible 是基於 ssh 協議實現的,所以其配置公私鑰的方式與 ssh 協議的方式相同,具體操作步驟如下 生成金鑰 root localhost ssh keygen t rsa 向主機分發私鑰 root localhost ssh copy id root 10.0.0....
ansible常用模組
1.setup 該模組主要用於收集資訊,是通過呼叫facts元件來實現的 ansible doc s setup ansible mysql m setup 檢視mysql伺服器上所有資訊檢視遠端主機基本資訊 ansible all m setup2.ping測試遠端主機執行狀態 ansible a...