handler で複数のタスクを実行したい
Ansible Playbook の handler で複数のタスクを実行したいことがあります。
そういうときは、 その handler で実行したいタスクの YAML を tasks/ 配下に置きます。
具体的な例として、 AWS の CloudWatch Agent を停止して設定ファイルを読み込み、再度起動するまでの複数タスクを handler として設定します。
handler で実行したい複数タスクのファイル
まずは、CloudWatch Agent 再起動処理のタスクの YAML ファイルを作成します。
roles/foobar/tasks/restart_cloudwatch_agent.yml
---
# CloudWatch Agent の停止
- name: stop cloudwatch agent
service: name=amazon-cloudwatch-agent state=stopped
# 設定ファイルの再読み込み
- name: reload config
shell: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
changed_when: false
# CloudWatch Agent の起動
- name: start cloudwatch agent
service: name=amazon-cloudwatch-agent state=started
このファイルを tasks ディレクトリの下に置きます。
名前を restart_cloudwatch_agent.yml としています。
handler として設定
上記で作成したタスクファイルを handler として定義します。
handlers/main.yml の中で include_tasks を使って先ほど作ったファイルを呼び出します。
roles/foobar/handlers/main.yml
---
- name: cloudwatch restart
include_tasks: restart_cloudwatch_agent.yml
メインのタスクで notify として呼び出し
こうやって定義した handler をメインのタスクから notify で呼び出します。
以下は、設定ファイルを変更したときに CloudWatch Agent を再起動する例です。
roles/foobar/tasks/main.yml の一部
- name: cloudwatch-agent configuration
replace:
dest: /opt/aws/amazon-cloudwatch-agent/bin/config.json
regexp: 'ウンタラカンタラ'
replace: 'うんたらかんたら'
notify:
- cloudwatch restart
handler で複数タスクを実行したいときは、こんな感じで設定します。