かべぎわブログ

技術的なことについてかけたらいいな…

handlersセクションではlistenを使うことで処理を複数個記載することができる

概要

さて、今回もAnsibleのhandlersセクションのおはなしです。
handlersセクションではタスクに更新(changed)があった場合にのみ実行することができるセクションです。

いままではhandlersには一つのタスクしか紐付けることができませんでしたが、Ansible ver2.2 からlistenを利用することでhandlersで複数のタスクを実行することができるようになりました!

playbook例

たとえば、以下のplaybookの場合、./temp/wawawa.txtにコピーを実行し、wawawa.txtに変化がった場合のみ、handlersmake_wawawa_filemake_wawawa_file2の処理が実行されます。

実際にやってみる

./temp配下になにもない状態のときは、以下のような実行結果になります。
RUNNING HANDLER [make_wawawa_file]が実行されていることがわかります。

$ ls -l ./temp/
total 0

$ ansible-playbook -i ansible_hosts handler.yml -v

PLAY [localhost] *******************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************
ok: [localhost]

TASK [copy_file] *******************************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252948.16-195042225691797/source", "state": "file", "uid": 1000}

RUNNING HANDLER [make_wawawa_file] *************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa_result.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252948.85-42002962767209/source", "state": "file", "uid": 1000}

RUNNING HANDLER [make_wawawa_file2] ************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa_result2.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252949.29-14013734563506/source", "state": "file", "uid": 1000}

PLAY RECAP *************************************************************************************************************************************************************************
localhost                  : ok=4    changed=3    unreachable=0    failed=0 

つづけざまにもう一度コマンドを実行すると、wawawa.txtには変化はないので、以下のようにhundlersは実行されません。

$ ansible-playbook -i ansible_hosts handler.yml -v

PLAY [localhost] *******************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************
ok: [localhost]

TASK [copy_file] *******************************************************************************************************************************************************************
ok: [localhost] => {"changed": false, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "gid": 1000, "group": "ec2-user", "mode": "0664", "owner": "ec2-user", "path": "./temp/wawawa.txt", "size": 0, "state": "file", "uid": 1000}

PLAY RECAP *************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

おわりに

2日連続同じ記事感handlers

初めてのAnsible

初めてのAnsible