Ansible : Playbook を利用する#62015/07/15 |
Ansible の Roles 機能の利用例です。
具体的には以下のような構成(左図)になります。Roles は Ansible であらかじめ定義された Playbook の命名規則・ファイル配置に従うことで、 自動的にインクルードを実行する機能です。 playbook.yml, role01 は任意の名前で OK ですが、それ以外は固定となります。 ここでは例として、以下のような構成(右図) の Roles 適用 Playbook を作成します。 +--- playbook.yml +--- playbook_sample.yml | | +--- roles/ +--- roles/ | | +--- role01/ +--- ins_python_lib/ | | | +--- files/ | +--- vars/ | | | | +--- templates/ | | +--- main.yml | | +--- tasks/ +--- tasks/ | | | | +--- main.yml +--- handlers/ | | +--- ins_httpd/ +--- vars/ | | +--- files/ +--- defaults/ | | | | +--- index.html +--- meta/ +--- vars/ | | | +--- main.yml | +--- tasks/ | +--- main.yml |
[1] | 必要な Python モジュール と httpd をインストール & 起動する Roles 適用 Playbook です。 |
[cent@dlp ~]$ mkdir -p roles/ins_python_lib/{tasks,vars} [cent@dlp ~]$ mkdir -p roles/ins_httpd/{files,tasks,vars}
[cent@dlp ~]$
vi playbook_sample.yml - hosts: target_servers become: yes become_method: sudo roles: - ins_python_lib - ins_httpd
[cent@dlp ~]$
vi roles/ins_python_lib/vars/main.yml setuptools: - python-setuptools py_pip: - pip py_libs: - httplib2
[cent@dlp ~]$
vi roles/ins_python_lib/tasks/main.yml - name: setuptools is installed yum: name="{{ item }}" state=installed with_items: - "{{ setuptools }}" tags: install_setuptools - name: pip is installed easy_install: name="{{ item }}" with_items: - "{{ py_pip }}" tags: install_pip - name: httplib2 are installed pip: name="{{ item }}" with_items: - "{{ py_libs }}" tags: install_httplib2
[cent@dlp ~]$
vi roles/ins_httpd/vars/main.yml packages: - httpd
[cent@dlp ~]$
vi roles/ins_httpd/tasks/main.yml - name: httpd is installed yum: name="{{ item }}" state=installed with_items: - "{{ packages }}" tags: install_httpd - name: edit httpd.conf lineinfile: > dest=/etc/httpd/conf/httpd.conf regexp="{{ item.regexp }}" line="{{ item.line }}" with_items: - { regexp: "^#ServerName", line: "ServerName {{ ansible_fqdn }}:80" } tags: edit_httpd.conf - name: httpd is running and enabled service: name=httpd state=started enabled=yes - name: put index.html copy: src=index.html dest=/var/www/html owner=root group=root mode=0644 - name: check httpd uri: url=http://"{{ ansible_fqdn }}"
[cent@dlp ~]$
[cent@dlp ~]$ echo "httpd index page" > roles/ins_httpd/files/index.html ansible-playbook playbook_sample.yml --ask-become-pass SUDO password: PLAY [target_servers] ********************************************************* GATHERING FACTS *************************************************************** ok: [10.0.0.51] ok: [10.0.0.52] TASK: [ins_python_lib | setuptools is installed] ****************************** ok: [10.0.0.51] => (item=python-setuptools) changed: [10.0.0.52] => (item=python-setuptools) TASK: [ins_python_lib | pip is installed] ************************************* ok: [10.0.0.51] => (item=pip) changed: [10.0.0.52] => (item=pip) TASK: [ins_python_lib | httplib2 are installed] ******************************* ok: [10.0.0.51] => (item=httplib2) changed: [10.0.0.52] => (item=httplib2) TASK: [ins_httpd | httpd is installed] **************************************** changed: [10.0.0.51] => (item=httpd) changed: [10.0.0.52] => (item=httpd) TASK: [ins_httpd | edit httpd.conf] ******************************************* changed: [10.0.0.51] => (item={'regexp': '^#ServerName', 'line': u'ServerName node01.srv.world:80'}) changed: [10.0.0.52] => (item={'regexp': '^#ServerName', 'line': u'ServerName node02.srv.world:80'}) TASK: [ins_httpd | httpd is running and enabled] ****************************** changed: [10.0.0.51] changed: [10.0.0.52] TASK: [ins_httpd | put index.html] ******************************************** changed: [10.0.0.52] changed: [10.0.0.51] TASK: [ins_httpd | check httpd] *********************************************** ok: [10.0.0.52] ok: [10.0.0.51] PLAY RECAP ******************************************************************** 10.0.0.51 : ok=9 changed=7 unreachable=0 failed=0 10.0.0.52 : ok=9 changed=7 unreachable=0 failed=0 |
Sponsored Link |