
プレイブックの実行中に失敗を無視するためのこのフラグを知っていますが、ignore_errors: yes
「アクションを無視」しませんが、プレイブックを最後まで実行するように設定できることがAnsibleにあるかどうか疑問に思います。より良い報告制御を望むからです。
これを説明するために、これまでの「実行中のレビュー」は次のとおりです。
PLAY RECAP *******************************************************************************************************************************************************************************************
<server> : ok=195 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 **ignored=10**
「ignored=10」は実際に「失敗した確認」です。必要なのは、次のように再説明することです。
PLAY RECAP *******************************************************************************************************************************************************************************************
<server> : ok=195 changed=0 unreachable=0 **failed=10** skipped=0 rescued=0 ignored=0
答え1
あなたの質問について
Ansibleで設定できるものがあれば、「動作を無視」するのではなく、プレイブックを最後まで実行することです。
あなたは見ることができますプレイブックのエラー処理そして失敗の定義〜のように
Ansibleを使用すると、条件を使用して各タスクで「失敗」が意味するものを定義できます
failed_when
。
しかもblock
sを使用したエラー処理。
答え2
使用できる戦略の1つは、エラーを無視して失敗条件を変数に保存し、その変数の状態をPlayBookの最後のアクションにアサートすることです。そのように:
- 失敗の有無にかかわらず、すべての操作が試行されます。
- いずれかの操作が失敗すると、プレイブック全体が失敗するため、最終レポートで成功または失敗を確認し、必要に応じてコマンドの戻りコードを使用できます。
- デフォルトでは、ジョブの失敗は無視されても赤で強調表示されているため、そのメッセージはPlaybookの出力で簡単に見つけることができます。
failed
登録された出力には、ループ項目のいずれかが失敗したかどうかを示す独自の属性があるため、これはループにも当てはまります。
たとえば、
- set_fact:
global_fail: false
- name: Assert the state of something
ansible.builtin.assert:
that:
- <condition you want to assert>
success_msg: ...
fail_msg: ...
register: assert_task
ignore_errors: true
- set_fact:
global_fail: "{{ global_fail or (assert_task.failed is defined and assert_task.failed) }}"
<Further tasks here>
- name: Assert that no tasks failed
ansible.builtin.assert:
that:
- not global_fail
success_msg: "All tasks succeeded"
fail_msg: "One or more tasks failed"