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: started
playbookを実行します。
[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