Ansible changed_whenでタスクの変更条件を定義するサンプル

環境
Red Hat Enterprise Linux release 9.2 (Plow)
Ansible 2.14.2
Python 3.11.2

概要
changed_when: result.rc == 値
タスクを実行した結果、対象ホストの状態が変化した場合にステータスが changed 状態になる
changed_when を使用するとタスクの状態が変化したと判断する条件を設定できる

操作例
diff コマンドのリターンコードは差異がなければ 0 、差異があれば 1 、エラーが発生したら 2 です。
リターンコードが 1 のときは changed 、2 のときは failed になります。
$cat testa
study
$cat testb
skill

1.ymlファイルの定義testcc.yml

- hosts: server
  gather_facts: no

  tasks:
    - name: ファイルを比較し、異なるときは notify する
      shell: diff /opt/ansible/testa /opt/ansible/testb
      register: result
      changed_when: result.rc == 1
      failed_when: result.rc > 1
      notify: "file changed"

  handlers:
    - name: ファイルに差異があったときの処理
      debug:
        msg: "ファイルに差異が見つかりました"
      listen: "file changed"

実行結果

$ansible-playbook -i hosts testcc.yml

PLAY [server] ***********************************************************************************************************************************************

TASK [ファイルを比較し、異なるときは notify する] ***********************************************************************************************************
changed: [192.168.213.129]

RUNNING HANDLER [ファイルに差異があったときの処理] **********************************************************************************************************
ok: [192.168.213.129] => {
    "msg": "ファイルに差異が見つかりました"
}

PLAY RECAP **************************************************************************************************************************************************
192.168.213.129            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

Ansible

Posted by arkgame