Ansible - 失敗時に続行(無視する代わりに)

Ansible - 失敗時に続行(無視する代わりに)

プレイブックの実行中に失敗を無視するためのこのフラグを知っていますが、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

しかもblocksを使用したエラー処理

答え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"





関連情報