Chapter 17

【ルール説明】ignore-errors

mamono210
mamono210
2022.12.23に更新

ignore-errors

ignore-errorsansible.builtin.commandモジュールおよび ansible.builtin.shell モジュールにおいて ignore-errorsディレクティブ が付与されることによりコマンド実行時のエラーが無視されないかどうかを検証します。

コマンドがfailedを返すにも関わらずエラーを無視すると実際の失敗を隠したり、タスクを誤って失敗と出力したり、予期しない副作用や動作が発生します。

注意する点として ignore-errorsディレクティブ はコマンド実行時のエラーを無視するのみでシンタックスエラーや接続エラー、ファイルが存在しない等のコマンド実行に関わらないエラーは無視されずそのままエラーになります。

問題のあるコード

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Run apt-get update
      ansible.builtin.command: apt-get update
      ignore_errors: true # <- コマンドのエラーを全て無視する設定になっている

修正されたコードその1

"{{ ansible_check_mode }}"を付与してエラーを無視します。

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Run apt-get update
      ansible.builtin.command: apt-get update
      ignore_errors: "{{ ansible_check_mode }}" # <- Ignores errors in check mode.

修正されたコードその2

エラー情報を変数へ登録します。

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Run apt-get update
      ansible.builtin.command: apt-get update
      ignore_errors: true
      register: ignore_errors_register # <- エラー情報を変数へ登録する

修正されたコードその3

whenディレクティブを付与しエラーになる条件を定義します。

この書き方が一番良いみたいだと言う旨のブログ記事がいくつか観測されています。恐らく ignore-errorsディレクティブ を利用せずにこのように処理を記述するのが良いのだと思います。

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Disable apport
      become: "yes"
      lineinfile:
        line: "enabled=0"
        dest: /etc/default/apport
        mode: 0644
        state: present
      register: default_apport
      failed_when: default_apport.rc !=0 and not default_apport.rc == 257 # <- エラーになる条件を定義する.

参考サイト