當 Ansible 收到命令的非零返回碼或模塊故障時,默認情況下,它會停止在該主機上的執行,并在其他主機上繼續執行。但是,在某些情況下,您可能需要不同的行為。有時非零返回碼表示成功。有時您希望一臺主機上的故障導致所有主機上的執行停止。Ansible 提供了處理這些情況的工具和設置,并幫助您獲得所需的行為、輸出和報告。
Ansible 是一款強大的工具,可同時在多臺計算機上自動執行任務。然而,與任何自動化工具一樣,事情有時也會出現錯誤。了解如何在 Ansible 中處理錯誤對于創建可靠且可維護的劇本至關重要。在本文中,我們將探討 Ansible 中的各種錯誤處理技術,包括錯誤檢測、重試、忽略故障以及為后續任務注冊變量。
1. Ansible 錯誤檢測
Ansible 會識別執行過程中失敗的任務中的錯誤。當任務失敗時,除非您另有指示,否則 Ansible 會停止劇本的執行。這無需明確檢查每個任務的結果,因為 Ansible 會在發生嚴重故障時自動停止。
---
- name: Error Detection Examplehosts: localhosttasks:- name: Create directoryfile:path: /tmp/mydirstate: directory- name: Create a file in the non-existent directoryfile:path: /tmp/mydir/nonexistent/file.txtstate: touch
在此示例中,創建目錄成功,但第二個任務將失敗,因為它嘗試在不存在的路徑中創建文件,從而停止了 playbook 的執行。
2. 使用 ignore_errors
如果您想優雅地處理某些錯誤而不停止整個 playbook,可以使用 `ignore_errors` 指令。
---
- name: Ignore Errors Examplehosts: localhosttasks:- name: Create a file with ignore_errorsfile:path: /tmp/mydir/nonexistent/file.txtstate: touchignore_errors: yes- name: Notify the userdebug:msg: &