こちらの記事はAnsible lint Advent Calendar 2022 20日目の記事になります。
今回はルール ignore-errors について説明します。
ignore-errors
ignore-errors は ansible.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 # <- エラーになる条件を定義する.
Comments
Let's comment your feelings that are more than good