playbookの書き方

Ansible

検証環境はこちらを利用しています。
CentOS Linux release 7.9.2009 (Core)
python version 2.7.5
ansible 2.9.23

Ansibleにおけるplaybookとは、ターゲットホストに対して行う設定、構築手順をまとめたものでplaybookの内容からサーバに設定している内容がわかります。

playbookのYAML形式で表現され、1つ以上のplayから構成されています。

じゃあplayはどういった構成なのかというと、targets,vars,tasks,handlersの4つのセクションから成っています。

簡単なplaybookを書いて、動作を確認してみました。

---
- hosts: all

  tasks:
    - name: selinux module
      selinux:
        state: disabled

hostsの部分がtargetsセクションで、tasksから下がtasksセクションになります。
ここではインベントリのホスト全てを対象に、selinuxモジュールを使用して、selinuxdisabledにするタスクを書きました。

一度実行してみます。

[root@ansible-ctl ~]# ansible-playbook -i /etc/ansible/hosts test.yml

PLAY [all] ****************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [node1]

TASK [selinux module] *****************************************************************************************************
ok: [node1]

PLAY RECAP ****************************************************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible-ctl ~]#

成功して、ok=2と表示されました。既にターゲットノードのselinuxdisabledにしてあったため、changedではなくokになっている様子です。
インベントリは他で使用したものを流用しました。色々書いていますが必要なのはnode1の部分だけです。

[web:children]
test

[test]
node1 ansible_host=192.168.157.137 var_test="host var"

[test:vars]
var_test="This is test message."

次はvarsセクションを書いてみます。

---
- hosts: localhost

  vars:
    debug_msg: "TEST MSG."

  tasks:
    - debug:
        msg: "{{ debug_msg }}"

変数を表示するだけなので、hostslocalhostを対象にしています。
debug_msgが表示されるかどうか確認してみます。

[root@ansible-ctl ~]# ansible-playbook -i /etc/ansible/hosts test2.yml

PLAY [localhost] **********************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [localhost]

TASK [debug] **************************************************************************************************************
ok: [localhost] => {
    "msg": "TEST MSG."
}

PLAY RECAP ****************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

debugタスクの中でTEST MSG.が表示されました。varsセクションで指定した変数をtasksのモジュール内で使用することができました。

次はhandlerセクションを試してみます。

---
- hosts: all

  tasks:
    - name: selinux module
      selinux:
        state: disabled
      notify: restart server

  handlers:
    - name: restart server
      reboot:

selinuxの設定が変更された場合、サーバを再起動するようにhandlersを指定しました。

動作を確認してみます。

[root@ansible-ctl ~]# ansible-playbook -i /etc/ansible/hosts test.yml

PLAY [all] ****************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [node1]

TASK [selinux module] *****************************************************************************************************
ok: [node1]

PLAY RECAP ****************************************************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

既にターゲットノードのselinuxdisabledになっていて、設定変更が発生しませんでした。そのためhandlersも実行されなかったようです。

ターゲットノードのselinux設定をpermissiveにしてから再度playbookを実行してみます。

[root@ansible-ctl ~]# ansible-playbook -i /etc/ansible/hosts test.yml

PLAY [all] ****************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [node1]

TASK [selinux module] *****************************************************************************************************
changed: [node1]

RUNNING HANDLER [restart server] ******************************************************************************************
changed: [node1]

PLAY RECAP ****************************************************************************************************************
node1                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible-ctl ~]#

今度はselinuxのタスク結果がchangedになり、handlerが実行されました。

playbookの各セクションの書き方の基礎について学びました。ここからサーバ構築にあたり必要なモジュールを選択し、設定することで自動化を進めることができそうです。

コメント

タイトルとURLをコピーしました