はじめに
Ansible playbookの実行方法、playbook例では、playbook定義ファイルを1つ作成して実行した。
今回はRole機能を利用して、処理を分割(モジュール化)し、再利用できるようにする。
システム構成
Ansible playbookの実行方法、playbook例と同じ。
実行方法
Ansible用hostsファイル設定
Ansible playbookの実行方法、playbook例と同じ。
Ansible定義ファイルの準備
以下のようなディレクトリ・ファイル構成で作成する。
/etc/ansible
|- /playbook/test_apache_install2.yml
|- /roles
|- /apache_install/tasks/main.yml ・・・Role(1)
|- /apache_confcopy/tasks/main.yml ・・・Role(2)
|- /apache_start/tasks/main.yml ・・・Role(3)
Role
Role(1) Apacheインストール
[root@ansibleserver /]# vi /etc/ansible/roles/apache_install/tasks/main.yml
- name: Apache install
yum: name=httpd state=installed
[root@ansibleserver /]#
Role(2) Apache設定ファイルコピー
[root@ansibleserver /]# vi /etc/ansible/roles/apache_confcopy/tasks/main.yml
- name: httpd.conf copy
copy:
src: /etc/ansible/playbook/apache/httpd.conf.src
dest: /etc/httpd/conf/httpd.conf
[root@ansibleserver /]#
Role(3) Apache起動
[root@ansibleserver /]# vi /etc/ansible/roles/apache_start/tasks/main.yml
- name: Apache start and enabled
service: name=httpd state=started enabled=yes
[root@ansibleserver /]#
playbook
上記で作成した3つのRole(ディレクトリ)名を、roles:パラメータに記載する。
[root@ansibleserver /]# vi /etc/ansible/playbook/apache/test_apache_install2.yml
- hosts: ansibleclient-all
roles:
- apache_install
- apache_confcopy
- apache_start
[root@ansibleserver /]#
Ansible playbookの実行
Ansible playbookの実行方法、playbook例と同じ。
実行例)
[root@ansibleserver /]# ansible-playbook /etc/ansible/playbook/apache/test_apache_remove.yml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [ansibleclient-all] *********************************************************************************
TASK [Gathering Facts] ***********************************************************************************
ok: [ansibleclient2]
ok: [ansibleclient1]
TASK [Apache remove] *************************************************************************************
changed: [ansibleclient1]
changed: [ansibleclient2]
TASK [httpd.conf delete] *********************************************************************************
ok: [ansibleclient1]
ok: [ansibleclient2]
PLAY RECAP ***********************************************************************************************
ansibleclient1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansibleserver /]#
まとめ
AnsibleのRole機能を利用することで、処理の再利用ができ、playbookの可読性も良くなる。
ある時は「Apacheインストールのみ」、またある時は「Apache設定ファイルコピー・再起動」と使い分けることもできる。
Roleの分割方針はシステム構成や設計によって様々だが、サーバ単位ではなく製品単位や処理単位で分割した方が再利用しやすいと考える。