How to Install and Configure Ansible on Ubuntu 18.04 LTS

Ansible is a free and open source software that can be used to automate software provisioning, configuration management, and application deployment. Unlike Puppet or Chef, you don't have to set up a client-server environment before using Ansible. You can manage multiple hosts from a central location. This tool is very simple yet powerful to automate complex multi-tier IT application environments. Ansible communicates over normal SSH channels to retrieve information from remote machines and perform tasks.

In this tutorial, we will learn how to install and use Ansible on Ubuntu 18.04 server.

Requirements

  • Two Ubuntu 18.04 server system with OpenSSH server installed.
  • A static IP address 192.168.0.101 is set up on the server system and 192.168.0.104 is set up on the client system.
  • A non-root user with sudo privileges is set up on both systems.

Getting Started

Before starting, update your system with the latest version with the following command:

sudo apt-get update -y
sudo apt-get upgrade -y

Once your system is up-to-date, restart your system to apply the changes.

Install and Configure Ansible

By default, The latest version of Ansible is not available in the Ubuntu 18.04 default repository. So you will need to add Ansible PPA to your server. You can do this by running the following command:

sudo apt-add-repository ppa:ansible/ansible

Next, update the repository and install Ansible with the following command:

sudo apt-get update -y
sudo apt-get install ansible -y

Once the installation is completed, you can check the Ansible version with the following command:

sudo ansible --version

Output:

ansible 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]

Next, you will need to define your client system which you want to manage in Ansible hosts file. You can do this by editing /etc/ansible/hosts file:

sudo nano /etc/ansible/hosts

Add the following lines:

[Client]
node1 ansible_ssh_host=192.168.0.104

Save and close the file, when you are finished.

Configure SSH Keys for Client System

Ansible uses SSH to communicate with Client host. So you will need to configure key-based ssh authentication for Client host.

First, generate an SSH key pair with the following command:

ssh-keygen

Output:

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:
SHA256:bTVjTCKqxD8rnIw7/6mB6ZH9cnhzzOFg+/+x4clSOow [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        . . .    |
|   .   . . +     |
|    o .     *    |
|   . o   . o o   |
|    . o S o      |
|   O .oo..  .    |
|  * Bo.* + oo    |
| ..oo+=.E =o =   |
|  ooo*++...+*    |
+----[SHA256]-----+

Next, copy this public key to the Client system with the following command:

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

Output:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

Working with Ansible

Ansible is now installed and configured. It's time test Ansible.

On the Ansible server, try to ping your Client system using Ansible with the following command.

ansible -m ping Client

Output:

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

If you have multiple client configured in your Ansible hosts file. Then, you can ping all the Client system with the following command:

ansible -m ping all

You can check the status of the Apache web server on the Client system with the following command:

ansible -m shell -a 'service apache2 status' Client

Output:

node1 | CHANGED | rc=0 >>
 * apache2 is running

To check the partition size of the Client system, run the following command:

ansible -m shell -a 'df -h' Client

Output:

node1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       138G   48G   83G  37% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           384M  1.2M  383M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G   67M  1.9G   4% /run/shm
none            100M   36K  100M   1% /run/user
/dev/sda5       225G   35G  180G  16% /Data

Congratulations! you have successfully installed and configured Ansible on Ubuntu 18.04 server. You can now easily use Ansible to execute simple tasks remotely.

Share this page:

Suggested articles

0 Comment(s)

Add comment