かべぎわブログ

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

Ansibleでhandlersとnotifyをつかってみる

今回はAnsibleでhandlersnotifyを使って更新があった場合にのみ実行される処理をためしてみたいと思います。

handlersとは?

handlersとはchangedになった場合にのみ実行するタスクを記載できるセクションです。

playbook例

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

実際にやってみる

./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-1520252399.96-18679290845108/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-1520252400.64-10450162191451/source", "state": "file", "uid": 1000}

PLAY RECAP *************************************************************************************************************************************************************************
localhost                  : ok=3    changed=2    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   

おわりに

じゃっかん例がわるいようなきがしますけれど便利ですよhandlers

入門Ansible

入門Ansible