
Ansible Documentation
Overriding The Changed Result機能
- タスクを実行した結果、対象ホストの状態が変化した場合にステータスが changed 状態になる
- ※ shell モジュールなどの一部モジュールは常に changed になる
- changed_when を使用するとタスクの状態が変化したと判断する条件を設定できる
例
diff コマンドのリターンコードは差異がなければ 0 、差異があれば 1 、エラーが発生したら 2 です。リターンコードが 1 のときは changed 、2 のときは failed になる例です。[root@node-c0706 ~]# cat file-a
abc
[root@node-c0706 ~]# cat file-b
xyz
[root@node-c0706 ~]#
- hosts: all gather_facts: no tasks: - name: ファイルを比較し、異なるときは notify する shell: diff ~/file-a ~/file-b register: result changed_when: result.rc == 1 failed_when: result.rc > 1 notify: "file changed" handlers: - name: ファイルに差異があったときの処理 debug: msg: "ファイルに差異が見つかりました" listen: "file changed"実行結果
ansibleman@ubuntu-pc:~/ansible/changed_when$ ansible-playbook -i hosts.yml site.yml
PLAY [all] *********************************************************************************************************
TASK [ファイルを比較し、異なるときは notify する] ***********************************************************************************
changed: [node-c0706]
RUNNING HANDLER [ファイルに差異があったときの処理] *********************************************************************************
ok: [node-c0706] => {
"msg": "ファイルに差異が見つかりました"
}
PLAY RECAP *********************************************************************************************************
node-c0706 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleman@ubuntu-pc:~/ansible/changed_when$
changed_when に指定した条件が成立したとき changed と判断されるので、条件に no または false を指定すると条件判断の結果は常に false になります。結果、タスクの実行結果が ok / changed にかかわらず常に changed と判断されません。次の例は changed_when と failed_when の両方に no を指定しているので、shell モジュールの結果にかかわらず ok と判断されます。
- hosts: all gather_facts: no tasks: - name: ファイルを比較する shell: diff ~/file-a ~/file-b register: result changed_when: no failed_when: no実行結果
ansibleman@ubuntu-pc:~/ansible/changed_when$ ansible-playbook -i hosts.yml site.yml
PLAY [all] *********************************************************************************************************
TASK [ファイルを比較する] ***********************************************************************************
ok: [node-c0706]
PLAY RECAP *********************************************************************************************************
node-c0706 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleman@ubuntu-pc:~/ansible/changed_when$