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件のコメント