Error-Handling

只有在劇本沒有問題的情況下,如何執行 Ansible 劇本?

  • December 26, 2018

我已經了解了ansible-playbook example.yml --check可以告訴我劇本中的某些內容是否有問題的命令(據 Ansible 可以辨識)。

我想我應該把這個命令和ansible-playbook example.ymlso 結合起來,只有在前一個測試聽沒有錯誤的情況下才能執行我的劇本。

我想到了這個,但我不確定它是否正確:

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 "$@"
}

引用自:https://unix.stackexchange.com/questions/490130