Getting Started with Ansible: What, Why and How

Getting Started with Ansible: What, Why and How

Ansible has rapidly become a leading tool for IT automation, configuration management and orchestration. As organizations strive for efficiency and consistency in their IT operations, Ansible provides a robust and flexible solution. This blog post serves as an in-depth introduction to Ansible, covering what it is, why it's beneficial, its key concepts and how to get started with installation and basic usage.

What is Ansible?

Ansible is an open-source automation tool designed for IT tasks such as configuration management, application deployment and task automation. It uses a simple, human-readable language (YAML) to describe automation jobs, making it accessible to both system administrators and developers.

Key features of Ansible :-

  • Agentless :- Ansible operates without the need for agents or additional software on the managed nodes, relying on SSH for communication.

  • Declarative language :- It uses YAML for configuration files, making it easy to read and write.

  • Idempotency :- Ensures that operations can be repeated without changing the system's state beyond the initial application.

Benefits of Using Ansible for IT Automation

Ansible offers several advantages that make it a powerful tool for IT automation :-

  1. Simplicity and Ease of Use :- Ansible’s playbooks use YAML, a straightforward language that is easy to read and write. This simplicity reduces the learning curve and allows teams to start automating quickly.

  2. Agentless Architecture :- Unlike other configuration management tools, Ansible does not require any agents to be installed on the target machines. It uses SSH to communicate with the nodes which simplifies the setup and reduces overhead.

  3. Scalability :- Ansible can manage thousands of nodes using a single control machine making it suitable for small-scale environments as well as large-scale enterprise environments.

  4. Flexibility :- Ansible is highly flexible and can be used for a variety of tasks, including provisioning, configuration management, application deployment and orchestration.

  5. Community and Ecosystem :- Ansible has a large and active community, providing a wealth of roles, modules and plugins through Ansible Galaxy which can be reused and customized for various use cases.

Key Concepts in Ansible

To effectively use Ansible it's important to understand its core components and concepts :-

Inventory

The inventory file defines the hosts and groups of hosts upon which Ansible operates. It can be a simple text file, a static list or dynamically generated by a script. Here’s an example of a basic inventory file (inventory.ini) :-

[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com
db2.example.com

Playbooks

Playbooks are the heart of Ansible. They describe the set of tasks to be executed on the specified hosts. Playbooks are written in YAML and are easy to read and understand. Here's a simple example of a playbook to install Apache on web servers (install_apache.yml) :-

---
- name: Install Apache on web servers
  hosts: webservers
  tasks:
    - name: Ensure Apache is installed
      apt:
        name: apache2
        state: present
      become: yes

Modules

Modules are the units of work in Ansible. They perform tasks such as installing packages, managing services and handling files. Ansible comes with a wide range of built-in modules and you can also write custom modules if needed. For example the apt module is used to manage Debian packages.

Tasks

Tasks are the individual steps in a playbook. Each task calls a module and specifies the parameters required for that module to operate. Tasks are executed sequentially on the hosts specified in the playbook.

Roles

Roles are a way to organize playbooks and tasks into reusable components. A role might include tasks, variables, files, templates and handlers. This structure promotes reusability and maintainability of your Ansible code.

Installation and Setup of Ansible

Installing Ansible is straightforward. It can be installed on most Unix-like systems and there are several methods to do so. Here, we’ll cover installation on a Linux system using apt and pip.

Installing Ansible on Ubuntu/Debian

sudo apt update
sudo apt install -y ansible

Installing Ansible using pip

sudo apt update
sudo apt install -y python3-pip
pip3 install ansible

Verifying the Installation

After installation, you can verify that Ansible is installed correctly by checking its version :-

ansible --version

You should see output similar to:

ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.2 (default, Feb 26 2020, 22:21:03) [GCC 9.2.1 20200130]

Our First Ansible Command

Now that Ansible is installed, let’s run a basic command to ensure it’s working correctly. We will use the ping module to check connectivity with the hosts defined in our inventory file.

Creating an Inventory File

First, create a simple inventory file (inventory.ini) :-

[all]
localhost ansible_connection=local

Running the Ping Module

Use the following command to run the ping module :-

ansible all -m ping -i inventory.ini

The output should look like this :-

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

This confirms that Ansible can connect to the specified host and execute a module.

Example : Automating a Simple Task

Let's create a simple playbook to automate the installation of a web server (Apache) on a target host. This example will demonstrate how to use Ansible to perform a real-world task.

Step 1 : Define the Inventory

Create an inventory file (hosts.ini) with the target host information :-

[webservers]
192.168.1.100 ansible_user=your_username ansible_ssh_private_key_file=~/.ssh/id_rsa

Step 2 : Create the Playbook

Create a playbook file (install_apache.yml) to install Apache :-

---
- name: Install Apache on web servers
  hosts: webservers
  become: yes
  tasks:
    - name: Ensure Apache is installed
      apt:
        name: apache2
        state: present
    - name: Ensure Apache is started
      service:
        name: apache2
        state: started

Step 3 : Run the Playbook

Execute the playbook using the ansible-playbook command :-

ansible-playbook -i hosts.ini install_apache.yml

You should see output indicating that Ansible is installing Apache on the target host. Once completed, Apache should be installed and running on the specified server.

Example : Using Variables in Playbooks

Variables allow you to parameterize your playbooks, making them more flexible and reusable. Here’s an example of a playbook that uses variables to customize the Apache installation.

Step 1 : Define the Inventory

Use the same inventory file (hosts.ini) as in the previous example.

Step 2 : Create the Playbook with Variables

Create a playbook file (install_apache_with_vars.yml) that uses variables :-

---
- name: Install Apache on web servers
  hosts: webservers
  become: yes
  vars:
    apache_package: apache2
    apache_service: apache2
  tasks:
    - name: Ensure Apache is installed
      apt:
        name: "{{ apache_package }}"
        state: present
    - name: Ensure Apache is started
      service:
        name: "{{ apache_service }}"
        state: started

Step 3 : Run the Playbook

Execute the playbook using the ansible-playbook command :-

ansible-playbook -i hosts.ini install_apache_with_vars.yml

This playbook achieves the same result as the previous one but demonstrates how to use variables for better flexibility and reusability.

Conclusion

Ansible is a powerful and flexible tool for IT automation, configuration management and orchestration. Its agentless architecture, ease of use and robust community support make it an ideal choice for managing diverse IT environments. By understanding key concepts such as inventory, playbooks, modules, tasks and roles you can start leveraging Ansible to automate and streamline your IT operations.

In this blog post, we covered the basics of Ansible including its installation and setup and provided examples to get you started with your first Ansible commands and playbooks. With this foundation you are well on your way to mastering Ansible and harnessing its full potential for your automation needs.

Let's continue exploring the capabilities of Ansible in future posts diving deeper into advanced topics and real-world use cases to further enhance your automation skills.

Let's connect and grow on Linkedin :Click Here

Let's connect and grow on Twitter :Click Here

Happy Automating!!!

Happy Reading!!!

Sudha Yadav