Error-Handling
只有在劇本沒有問題的情況下,如何執行 Ansible 劇本?
我已經了解了
ansible-playbook example.yml --check
可以告訴我劇本中的某些內容是否有問題的命令(據 Ansible 可以辨識)。我想我應該把這個命令和
ansible-playbook example.yml
so 結合起來,只有在前一個測試聽沒有錯誤的情況下才能執行我的劇本。我想到了這個,但我不確定它是否正確:
ansible-playbook example.yml --check && ansible-playbook example.yml
我認為這
&&
將確保只有在檢查正常(未發現錯誤)時才會發生第二個命令(實際執行劇本)。是這樣嗎?如果不是,那麼確保當且僅當劇本沒有錯誤時才能播放劇本的正確方法是什麼?
在我的測試中,
ansible-playbook --syntax-check
確實根據劇本中的語法錯誤正確設置了退出程式碼。你可以相信我的話,好例子和壞例子劇本的行為都如所示。一個好文件:
$ ansible-playbook --syntax-check good-example.yaml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' playbook: good-example.yaml $ echo $? 0
…和一個損壞的文件:
$ ansible-playbook --syntax-check bad-example.yaml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' ERROR! 'xhosts' is not a valid attribute for a Play The error appears to have been in '/.../bad-example.yaml': line 2, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: --- - xhosts: all ^ here $ echo $? 4
所以我相信你可以按照你建議的方式進行語法檢查:
ansible-playbook --syntax-check example.yml && ansible-playbook example.yml
…雖然從語法檢查部分刪除輸出可能會更安靜:
ansible-playbook --syntax-check example.yml >/dev/null 2>&1 && ansible-playbook example.yml
**注意:**您可以將所有內容包裝在一個函式中以節省輸入:
safe-ansible() { ansible-playbook --syntax-check "$@" > /dev/null 2>&1 && ansible-playbook "$@" }