Ansibleの使い方(Handlersセクション編)
1 はじめに
1つのプレイブックは、1つ以上のプレイから構成されます。プレイは、以下のセクションから構成されます。本記事では、Handlersセクションについて動作確認をしてみます。
| セクション名 | 概要 |
|---|---|
| Targetsセクション | ターゲットノードへの接続に関する情報を定義します |
| Tasksセクション | 実行する処理を定義します |
| Handlersセクション | notifyディレクティブで指定したタスクを実行するセクションです。サービスの再起動や設定の更新などに使用します |
| Varsセクション | 変数を定義します |
2 検証環境
動作検証をするための環境は以下のとおりです。enp1s0はNICの名前です。
192.168.122.0/24
control(enp1s0) -------------------------------------(enp1s0) node1
.220 .87
| ホスト名 | 役割 |
|---|---|
| control | コントロールノードとして動作します。Ansibleをインストールします |
| node1 | ターゲットノードとして動作します |
コントロールノード、ターゲットノードのAlmaLinux版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release AlmaLinux release 9.2 (Turquoise Kodkod)
コントロールノード、ターゲットノードのカーネル版数は以下のとおりです。
[root@server ~]# uname -r 5.14.0-284.11.1.el9_2.x86_64
3 事前準備
Ansibleのインストールや公開鍵認証の設定方法などは、Ansibleの使い方(モジュール編) - hana_shinのLinux技術ブログを参照してください。
4 インベントリファイルの作成
インベントリファイルを作成します。
[root@control ~]# cat hosts.ini [nodes] node1 ansible_host=192.168.122.220
5 notifyディレクティブの動作確認
notifyディレクティブあり/なしの場合の動作確認をしてみます。
5.1 notifyディレクティブありの場合
Playbookを作成します。このPlaybookは、Tasksセクションでfileモジュールを実行してファイルを作成します。ファイルが作成されると、notifyディレクティブが実行され、それによりHandlersセクション内のdebugモジュールが呼び出されます。debugモジュールが実行されると、指定されたメッセージが表示されます。
[root@control ~]# cat test.yml
- name: Sample Playbook
hosts: nodes
tasks:
- name: Create file
ansible.builtin.file:
path: /tmp/test.txt
state: touch
notify: Display
handlers:
- name: Display
ansible.builtin.debug:
msg: The handlers section is called.Playbookを実行すると、指定したメッセージが表示されることがわかります。
[root@control ~]# ansible-playbook -i hosts.ini test.yml
PLAY [Sample Playbook] **************************************************************************************
TASK [Gathering Facts] **************************************************************************************
ok: [node1]
TASK [Create file] ******************************************************************************************
changed: [node1]
RUNNING HANDLER [Display] ***********************************************************************************
ok: [node1] => {
"msg": "The handlers section is called."
}
PLAY RECAP **************************************************************************************************
node1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@control ~]#
5.2 notifyディレクティブなしの場合
Playbookを作成します。このPlaybookでは、リモートノードに対してファイルを作成するタスクを実行します。ただし、notifyディレクティブが定義されていないため、Tasksセクションでファイルを作成しても、Handlersセクションのdebugモジュールは実行されません。
[root@control ~]# vi test.yml
[root@control ~]# cat test.yml
- name: Sample Playbook
hosts: nodes
tasks:
- name: Create file
ansible.builtin.file:
path: /tmp/test.txt
state: touch
handlers:
- name: Display
ansible.builtin.debug:
msg: The handlers section is called.Playbookを実行します。notifyディレクティブが定義されていないため、メッセージが表示されないことがわかります。
[root@control ~]# ansible-playbook -i hosts.ini test.yml PLAY [Sample Playbook] ************************************************************************************** TASK [Gathering Facts] ************************************************************************************** ok: [node1] TASK [Create file] ****************************************************************************************** changed: [node1] PLAY RECAP ************************************************************************************************** node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@control ~]#
6 実践編(httpdの起動)
httpdパッケージをインストールしたら、httpdサービスを起動するplaybookを作成します。
[root@control ~]# vi test.yml
[root@control ~]# cat test.yml
- name: Sample Playbook
hosts: nodes
tasks:
- name: Install Apache
ansible.builtin.dnf:
name: httpd
state: present
notify:
- Start Apache
handlers:
- name: Start Apache
ansible.builtin.service:
name: httpd
state: startedplaybookを実行します。
[root@control ~]# ansible-playbook -i hosts.ini test.yml PLAY [Sample Playbook] ******************************************************************* TASK [Gathering Facts] ******************************************************************* ok: [node1] TASK [Install Apache] ******************************************************************** changed: [node1] RUNNING HANDLER [Start Apache] *********************************************************** changed: [node1] PLAY RECAP ******************************************************************************* node1 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@control ~]#
httpdサービスの状態を確認するとactiveになっていることがわかります。
[root@node1 ~]# systemctl is-active httpd active
Y 参考図書
本記事の作成に以下の図書を参考にしました。

Ansible実践ガイド 第4版[基礎編] impress top gearシリーズ
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ
Ansible の使い方
Ansible Playbookとはなにか [書き方 | 基本 | YAML] - APC Automation blog
Ansible マジック変数の一覧と内容 #Ansible - Qiita


