Installation and Configuration of Ansible Automation Tool for IT Management

Installation and Configuration of Ansible Automation Tool for IT Management

Ansible is a free-software platform for configuring and managing computers, ad hoc task execution, configuration management and multi-node software deployment. It manages nodes over SSH or over PowerShell. Modules that are working over JSON and standard output can be programmed in any language. In Ansible the playbooks deploys, orchests and configures. Its format is YAML. It maps a group of hosts to a set of roles. This tutorial will teach you, how to install Ansible on RHEL/CentOS, Fedora, Ubuntu and Debian systems.

Features

  • Repeatable & Reliable
  • Simple to write and maintain.
  • No Agent ( MORE SECURE, MORE PERFORMANCE, LESS EFFORT)
  • Super flixible to manage
  • Cloud ready (Included modules manage like Amazon AWS, Rackspace Cloud, and more).
  • Platform support
  • Control machines must have Python 2.6 or 2.7.
  • Operating systems supported on control machines includes Linux and Unix distributions, such as Red Hat, Debian, CentOS, OS X, BSD, and Ubuntu among others.
  • Managed nodes must have Python 2.4 or later. For managed nodes with Python 2.5 or earlier, the python-simplejson package is also required. Ansible can manage Windows nodes starting from version 1.7.

Prerequisites

  • Jinja2 - A modern, fast and easy to use stand-alone template engine for Python.
  • Operating System - RHEL/CentOS/Fedora and Ubuntu/Debian/Linux Mint
  • Parmiko - A native Python SSHv2 channel library
  • PyYAML - A YAML parser and emitter for the Python programming language
  • SSHpass - A non-interactive SSH password authentication.
  • httplib2 - A comprehensive HTTP client library.

Server Setup

Controlling Machine Ansible
Operating System CentOS 7
IP Address 192.168.5.64
Host-name linuxhelp
User root

Remote nodes

node 1 192.168.5.177
node 2 192.168.5.207

Installation of Controlling Machine

Before installation we need to check out the details of the server such as hostname and IP Address. Next login as a root user into server and run the below command to confirm the system settings.

[root@linuxhelp ~]# ip a | grep inet

    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.5.64/24 brd 192.168.5.255 scope global eno16777736
    inet6 fe80::20c:29ff:fec4:5826/64 scope link

Lets install ‘ Ansible’ software on the system.

On Ubuntu/Debian/Linux Mint

An official Ansible PPA repository is available, add that repo by running the following command.

$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update & &  sudo apt-get install ansible

On RHEL/CentOS/Fedora

There is no official Ansible repository for RedHat based distributions, but you can perform the installation of Ansible by enabling epel repository for RHEL/CentOS and fedora.

[root@linuxhelp Desktop]# yum install epel-release.noarch

Resolving Dependencies
-->  Running transaction check
--->  Package epel-release.noarch 0:7-5 will be installed
-->  Finished Dependency Resolution

Dependencies Resolved

=====================================================================================
 Package                        Arch                     Version                 Repository                Size
=====================================================================================
Installing:
 epel-release                   noarch                   7-5                     extras                    14 k

Transaction Summary
=====================================================================================
Install  1 Package
.
.
.
Transaction test succeeded
Running transaction
  Installing : epel-release-7-5.noarch                                                                      1/1 
  Verifying  : epel-release-7-5.noarch                                                                      1/1 

Installed:
  epel-release.noarch 0:7-5                                                                                     

After enabling epel repository, install an Ansible using the following command.

[root@linuxhelp Desktop]# yum install ansible

Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * epel: epel.mirror.net.in
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
Resolving Dependencies
-->  Running transaction check
--->  Package ansible.noarch 0:2.0.1.0-2.el7 will be installed
-->  Processing Dependency: sshpass for package: ansible-2.0.1.0-2.el7.noarch
-->  Processing Dependency: python-paramiko for package: ansible-2.0.1.0-2.el7.noarch
-->  Processing Dependency: python-keyczar for package: ansible-2.0.1.0-2.el7.noarch
-->  Processing Dependency: python-jinja2 for package: ansible-2.0.1.0-2.el7.noarch
-->  Processing Dependency: python-httplib2 for package: ansible-2.0.1.0-2.el7.noarch
.
.
.
Installed:
  ansible.noarch 0:2.0.1.0-2.el7                                                                                

Dependency Installed:
  PyYAML.x86_64 0:3.10-11.el7                            libtomcrypt.x86_64 0:1.17-23.el7                       
  libtommath.x86_64 0:0.42.0-4.el7                       python-babel.noarch 0:0.9.6-8.el7                      
  python-httplib2.noarch 0:0.7.7-3.el7                   python-jinja2.noarch 0:2.7.2-2.el7                     
  python-keyczar.noarch 0:0.71c-2.el7                    python-markupsafe.x86_64 0:0.11-10.el7                 
  python-paramiko.noarch 0:1.15.1-1.el7                  python-pyasn1.noarch 0:0.1.6-2.el7                     
  python2-crypto.x86_64 0:2.6.1-9.el7                    python2-ecdsa.noarch 0:0.13-4.el7                      
  sshpass.x86_64 0:1.05-5.el7                           

Complete!

Preparation of SSH Keys to Remote Hosts

In order to perform deployment from the localhost to remote host, create and copy the ssh keys to the remote host. First create a SSH key using the following command and copy the key to remote hosts.

[root@linuxhelp Desktop]# ssh-keygen -b 4048 -t rsa -C " root@192.168.5.64" 

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d6:a7:5b:7a:d8:1a:d4:eb:e3:76:47:28:e7:d5:5c:b5 root@192.168.5.64
The key' s randomart image is:
+--[ RSA 4048]----+
|                 |
|                .|
|                o|
|         . .   E.|
|        S o o  oo|                 
|       . . o..o =|
|          ooo+ o |
|          .*= o .|
|          +=oo . |
+-----------------+

Now you need to copy the created key to the two remote server’ s.

[root@linuxhelp ~]# ssh-copy-id root@192.168.5.177

The authenticity of host ' 192.168.5.177 (192.168.5.177)'  can' t be established.
RSA key fingerprint is bf:67:eb:8b:25:64:f5:79:7a:fa:89:9b:e1:84:1f:cc.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.5.177' s password: 

Number of key(s) added: 1
[root@linuxhelp ~]# ssh-copy-id root@192.168.5.207

The authenticity of host ' 192.168.5.207 (192.168.5.207)'  can' t be established.
RSA key fingerprint is 91:00:f3:68:de:83:64:50:9c:0a:57:fa:16:ec:94:3b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.5.207' s password: 

Number of key(s) added: 1

Check the ssh key authentication on all the remote hosts to verify whether the authentication is working or not.

[root@linuxhelp ~]# ssh root@192.168.5.177
Last login: Tue May  3 17:13:19 2016 
[root@linuxhelp ~]# ssh root@192.168.5.207
Last login: Tue May  3 22:01:39 2016

Create Inventory File for Remote Hosts

Inventory file contains the information about the host to get connected from local to remote. The inventory file will be under /etc/ansible/hosts. We need to add these hosts into the inventory file.

[root@linuxhelp ~]# vim /etc/ansible/hosts 

Remove the hash symbol near the webservers line or remove the whole line and enter a new group name as per your easy identification and add the hosts IP address.

[webservers]
192.168.5.177
192.168.5.207

Now verify our 2 servers by performing a ping from the localhost using the ‘ ansible‘ command with ‘ -m‘ (module) option.

[root@linuxhelp ~]# ansible webservers -m ping

192.168.5.207 | SUCCESS =>  {
    " changed" : false, 
    " ping" : " pong" 
}
192.168.5.177 | SUCCESS =>  {
    " changed" : false, 
    " ping" : " pong" 
}

Similarly there are several modules that can be used with Ansible command.

To check the httpd status on all the remote nodes under webserver group

[root@linuxhelp ~]# ansible webservers -a " service httpd status" 

192.168.5.207 | SUCCESS | rc=0 > > 
httpd (pid  3852) is running...

192.168.5.177 | SUCCESS | rc=0 > > 
httpd (pid  20338) is running...

To restart the httpd service on all remote nodes under webserver group

[root@linuxhelp ~]# ansible webservers -a " service httpd restart" 

192.168.5.207 | SUCCESS | rc=0 > > 
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

192.168.5.177 | SUCCESS | rc=0 > > 
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

To check partition on all remote nodes under webserver group

[root@linuxhelp ~]# ansible webservers -a " df -h" 

192.168.5.207 | SUCCESS | rc=0 > > 
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  2.1G   17G  12% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       190M   69M  112M  39% /boot
/dev/sda5       985M  1.3M  932M   1% /testing

192.168.5.177 | SUCCESS | rc=0 > > 
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        28G   11G   16G  40% /
tmpfs           495M  224K  495M   1% /dev/shm
/dev/sda1       291M   71M  205M  26% /boot

To check the cpuinfo on all remote nodes under webserver group

[root@linuxhelp ~]# ansible webservers -a " cat /proc/cpuinfo" 

192.168.5.207 | SUCCESS | rc=0 > > 
processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 58
model name    : Intel(R) Core(TM) i5-3330 CPU @ 3.00GHz
stepping    : 9
microcode    : 18
cpu MHz        : 3000.179
cache size    : 6144 KB
physical id    : 0
siblings    : 1
core id        : 0
cpu cores    : 1
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts fsgsbase smep
bogomips    : 6000.35
clflush size    : 64
cache_alignment    : 64
address sizes    : 40 bits physical, 48 bits virtual
power management:

192.168.5.177 | SUCCESS | rc=0 > > 
processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 58
model name    : Intel(R) Core(TM) i5-3330 CPU @ 3.00GHz
stepping    : 9
microcode    : 18
cpu MHz        : 3000.180
cache size    : 6144 KB
physical id    : 0
siblings    : 1
core id        : 0
cpu cores    : 1
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dts fsgsbase smep
bogomips    : 6000.36
clflush size    : 64
cache_alignment    : 64
address sizes    : 40 bits physical, 48 bits virtual
power management:

To check the memory usage on all remote nodes under webserver group

[root@linuxhelp ~]# ansible webservers -a free

192.168.5.207 | SUCCESS | rc=0 > > 
             total       used       free     shared    buffers     cached
Mem:       1012448     158928     853520        628      14644      54720
-/+ buffers/cache:      89564     922884 
Swap:      2097148          0    2097148 

192.168.5.177 | SUCCESS | rc=0 > > 
             total       used       free     shared    buffers     cached
Mem:       1012448     924044      88404       4848      83556     349080
-/+ buffers/cache:     491408     521040 
Swap:      2097148     112816    1984332 

To get the output in a file, enter the ‘ > ‘ operator after the command and enter the destination file path.

Tag : Ansible
FAQ
Q
What is an Ansible role?
A
Roles provide a framework for fully independent, or interdependent collections of variables, tasks, files, templates, and modules. In Ansible, the role is the primary mechanism for breaking a playbook into multiple files.
Q
How to resolve "UNREACHABLE! => {“changed”: false,“msg”: “Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n”,“unreachable”: true" error in ansible?
A
Install python on remote servers and also add ansible users and web servers in it.
Q
What steps to be taken when “yaourt not found” appears during configuration?
A
yaourt doesn't come as pre-installed you need to install it separately during ansible configuration.
Q
Error: Package: python-paramiko-2.1.1-0.4.el7.noarch (epel) Requires: python2-pyasn1 Error: Package: python-paramiko-2.1.1-0.4.el7.noarch (epel) Requires: python-cryptography in ansible configuration.
A
Install python-cryptography manually using the PIP tool as shown. Use "sudo pip install pycrypto" in Ansible settings.
Q
How to install Ansible via rpm please provide some link?
A
Refer to Ansible's official documentation http://docs.ansible.com/ansible/latest/intro_installation.html#running-from-source for more assistance.