検証環境はこちらを利用しています。
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モジュールを使用して、selinuxをdisabledにするタスクを書きました。
一度実行してみます。
[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と表示されました。既にターゲットノードのselinuxはdisabledにしてあったため、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 }}"
変数を表示するだけなので、hostsはlocalhostを対象にしています。
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
既にターゲットノードのselinuxはdisabledになっていて、設定変更が発生しませんでした。そのため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の各セクションの書き方の基礎について学びました。ここからサーバ構築にあたり必要なモジュールを選択し、設定することで自動化を進めることができそうです。
コメント