1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ansible】 handler で複数の処理を実行する

Last updated at Posted at 2024-11-28

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 で複数タスクを実行したいときは、こんな感じで設定します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?