Ansibleにはnotifyという属性を使って、confなど変更があった場合にサービスを再起動(コールバック処理)などできますこれを一般的にハンドラと言うのだが、あまりにも役に立つので紹介しましょう。
■Playbook
今回はelasticsearchのconfが変更あったら再起動させるplaybookを作ってみた。
・流れ
1.filesにあるファイルをコピーする
2.ファイルが変更あったらhandlersを呼んでelasticsearchを再起動させる
1 2 3 4 5 6 7 8 9 |
$ tree elasticsearch ├── files │ ├── elasticsearch.yml │ └── jvm.options ├── handlers │ └── main.yml └── tasks └── main.yml |
まずはhandlersというディレクトリを作成します。
・handlers/main.yml
1 2 |
- name: restart elasticsearch service: name=elasticsearch state=restarted |
ここはelastisearchを再起動するplaybook。
・tasks/main.yml
1 2 3 4 5 6 7 8 9 10 |
- name: Copy Elasticsearch Setting Files. copy: src: "{{ item.src }}" dest: "/etc/elasticsearch" owner: root group: root with_items: - { src: roles/elasticsearch/files/elasticsearch.yml, dest: } - { src: roles/elasticsearch/files/jvm.options, dest: } notify: restart elasticsearch #仕込む |
copyモジュールでコピーしてからのnotifyでファイルに変更あったら再起動させるようにします。これで実行してみれば分かるのだが、タスクがChangedを返さないとハンドラは起動しないようになっています。
■まとめ
ハンドラいいね!余談なのだが、「あだちん冪等性って知ってる?」と言われ、今までAnsibleは機能ごとにtagで指定してplaybook実行していたのだが、それはやってはならんと知り、愕然としたw次回は冪等性とはなんなのかブログで紹介したいと思います。
参考
http://docs.ansible.com/ansible/playbooks_intro.html
0件のコメント