Site icon UnixArena

Ansible – What is Playbook ? Play with Tasks & Handlers

Ansible Playbook

Ansible Playbook

Ansible – What is playbook? Playbooks are useful to perform multiple tasks and eliminates the limitation of Ad-hoc mode. Playbooks are the configuration, deployment and orchestration language of Ansible and it’s expressed in YAML format. If Ansible modules are the tools in your workshop, playbooks are your instruction manuals. YAML (Yet Another Markup Language) is human-readable data serialization language. This article will demonstrate that how to create a simple playbook and execute it.

 

Writing the First Playbook: 

1. Login to Ansible engine server.

 

2. Create a new playbook to install “httpd” on Linux servers.

---

- hosts: all
  become: yes

  tasks:
    - name: Install the latest version of Apache
      yum: name=httpd state=latest update_cache=yes

3. Save the file with an extension of “yaml”.

$ ls -lrt install_httpd.yaml
-rw-rw-r-- 1 linadm linadm 294 Jul 25 21:47 install_httpd.yaml
$

 

4. Create the list of servers where you would like to install the latest version of Apache.

$ ls -lrt lin-servers
-rw-r--r-- 1 linadm linadm 1370 Jul 12 02:26 lin-servers
$

 

5. Execute the playbook to deploy Apache on all the list of servers.

$ ansible-playbook -i lin-servers install_httpd.yaml

PLAY [gpfslinapp1] ******************************************************************************************************

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

TASK [Install the latest version of Apache] ******************************************************************************************************
changed: [gpfslinapp1]

PLAY RECAP *******************************************************************************************
gpfslinapp1                : ok=2    changed=1    unreachable=0    failed=0

 

6. Let’s verify our work.

$ ansible -a "rpm -qa httpd" -i lin-servers all

gpfslinapp1 | SUCCESS | rc=0 >>
httpd-2.4.6-80.el7.centos.1.x86_64

 

7. Remove the “httpd” package before proceeding with next exercise.

We could be done the same thing in the ad-hoc mode as well.

What’s the advantages of using playbook? Let’s explore. 

We should be able to use multiple tasks, handlers, loops and conditional execution using the playbook.

 

How to use handlers in Ansible Playbook:? 

1. Update the playbook like below.

---

- hosts: all
  become: yes

  tasks:
    - name: Install the latest version of Apache
      yum: name=httpd state=latest update_cache=yes
      ignore_errors: yes
      notify: start Apache

  handlers:
    - name: start Apache
      service: name=httpd enabled=yes state=started

 

2. Execute the playbook.

$ ansible-playbook install_httpd.yaml -i lin-servers.1

PLAY [gpfslinapp1] ***************************************************************************************************

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

TASK [Install the latest version of Apache] ****************************************************************************************************
changed: [gpfslinapp1]

RUNNING HANDLER [start Apache] ****************************************************************************************************
changed: [gpfslinapp1]

PLAY RECAP *****************************************************************************************
gpfslinapp1                : ok=3    changed=2    unreachable=0    failed=0

Here you could see that package “httpd” is installed and service is started automatically. It also enabled across the server reboot.

 

3. Verify our work by checking the apache’s service status on the client node.

$  ansible -a "systemctl status httpd" -i lin-servers.1  all
gpfslinapp1 | SUCCESS | rc=0 >>
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-07-26 01:21:40 UTC; 4min 39s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 81943 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─81943 /usr/sbin/httpd -DFOREGROUND

 

We have successfully created the first Ansible playbook. Using the playbook , we have installed apache on the servers and started the service automatically. In the upcoming sections, we will be writing many playbooks using different modules and functionality.  Stay tuned.

Exit mobile version