CentOS 7
Sponsored Link

Ansible : Use Playbook#6
2015/07/15
 
This is the example of using the "Roles" function.
To use Roles, it's possible to include other tasks or Playbooks without writing "include" sentence.
It's necessary to configure directory tree like follows to use Roles.
The left image shows all tree, the right image shows an example of a Playbook on here.
+--- 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] For example, create a Playbook which install Python modules and httpd.
[[email protected] ~]$
mkdir -p roles/ins_python_lib/{tasks,vars}

[[email protected] ~]$
mkdir -p roles/ins_httpd/{files,tasks,vars}

[[email protected] ~]$
vi playbook_sample.yml
- hosts: target_servers
  become: yes
  become_method: sudo
  roles:
    - ins_python_lib
    - ins_httpd

[[email protected] ~]$
vi roles/ins_python_lib/vars/main.yml
setuptools:
  - python-setuptools

py_pip:
  - pip

py_libs:
  - httplib2

[[email protected] ~]$
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

[[email protected] ~]$
vi roles/ins_httpd/vars/main.yml
packages:
  - httpd

[[email protected] ~]$
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 }}"

[[email protected] ~]$
echo "httpd index page" > roles/ins_httpd/files/index.html
[[email protected] ~]$
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