私はAnsibleを学んでいます。リソースをクリーンアップするためのプレイブックがあり、プレイブックですべてのエラーを無視し、最後まで続行し、エラーがあった場合は最後に失敗するようにします。
エラーを無視できます
ignore_errors: yes
それが1つのタスクであれば、私は次のようなことをすることができました(アンシブルエラーキャッチから)
- name: this command prints FAILED when it fails
command: /usr/bin/example-command -x -y -z
register: command_result
ignore_errors: True
- name: fail the play if the previous command did not succeed
fail: msg="the command failed"
when: "'FAILED' in command_result.stderr"
最後に失敗するにはどうすればよいですか?いくつかのタスクがありますが、「いつ」条件はどうなりますか?
Fail モジュールを使用します。
- fail: msg="The execution has failed because of errors." when: flag == "failed"
更新:
Registerを使用して、例で示したようなタスクの結果を保存します。次に、次のようなタスクを使用します。
- name: Set flag
set_fact: flag = failed
when: "'FAILED' in command_result.stderr"
ブロックで失敗する可能性のあるすべてのタスクをラップし、そのブロックでignore_errors: yes
を使用できます。
tasks:
- name: ls
command: ls -la
- name: pwd
command: pwd
- block:
- name: ls non-existing txt file
command: ls -la no_file.txt
- name: ls non-existing pic
command: ls -la no_pic.jpg
ignore_errors: yes
ブロックでのエラー処理の詳細をお読みください こちら 。
失敗モジュールはうまく機能します!ありがとう。
確認する前に事実を定義する必要がありました。定義しないと、未定義変数エラーが発生します。
そして、引用符とスペースなしでファクトを設定するときに問題がありました。
これはうまくいきました:
set_fact: flag="failed"
これはエラーを投げました:
set_fact: flag = failed