Use Ansible for IT Automation

Nirmesh Mashru
Apr 28, 2024
5 mins read Last Updated Apr 28, 2024

Ansible has become one of the most popular tools for IT automation and configuration management. Its simplicity, agentless architecture, and powerful features make it a go-to choice for automating repetitive tasks, managing configurations, and orchestrating complex workflows. This blog will walk you through the basics of using Ansible, from installation to writing your first playbook.

What is Ansible?

Ansible is an open-source IT automation tool developed by Red Hat. It automates cloud provisioning, configuration management, application deployment, and many other IT needs. Ansible uses human-readable YAML templates to describe automation jobs, which allows for easier management and scalability.

Getting Started with Ansible

1. Installation

Installing Ansible is straightforward. It can be installed on most Unix-like systems, including macOS and Linux. Windows users can use the Windows Subsystem for Linux (WSL) to install it. Here are the steps for a typical installation on Ubuntu:

 
sudo apt update sudo apt install ansible

To verify the installation, run:

ansible --version

2. Setting Up Your Environment

Ansible operates by connecting to nodes (the servers you want to manage) over SSH. You need to ensure that:

  • You have SSH access to your nodes.
  • You have the necessary permissions to perform the tasks on those nodes.

Create an inventory file (commonly located at /etc/ansible/hosts), where you will define the nodes Ansible should manage. Here is an example inventory file:

 
webservers] 
webserver1.example.com 
webserver2.example.com 

[databases] 
dbserver1.example.com 

3. Running Ad-hoc Commands

Ansible allows you to run simple tasks using ad-hoc commands. This is useful for quick tasks like checking connectivity or system information. Here’s how to ping all hosts in your inventory:

 
ansible all -m ping

To install a package on a specific group of servers:

 
ansible webservers -m apt -a "name=nginx state=latest"


Writing Your First Playbook

Playbooks are where Ansible's real power shines. They allow you to define a series of tasks in YAML format. Here’s a simple example of a playbook that installs and starts Nginx on a group of web servers.

  1. Create a playbook file:
    ---
    - name: Ensure Nginx is installed and running
      hosts: webservers
      become: yes
      tasks:
        - name: Install Nginx
          apt:
            name: nginx
            state: present
    
        - name: Start Nginx
          service:
            name: nginx
            state: started
    
 
  1. Run the playbook:
ansible-playbook nginx_setup.yml

Key Components of Ansible

Modules

Modules are the building blocks of Ansible. They are standalone scripts that can be used to perform specific tasks like installing packages, managing files, or configuring services. For example, the apt module is used for package management in Debian-based systems.

Roles

Roles allow you to group tasks, variables, files, templates, and handlers into a standardized file structure. This promotes reusability and organization. Here’s an example structure of a role named webserver:

 
webserver/
  ├── tasks/
  │   └── main.yml
  ├── handlers/
  │   └── main.yml
  ├── templates/
  ├── files/
  └── vars/
      └── main.yml

Playbooks

Playbooks are YAML files that define a series of plays, where each play maps a group of hosts to roles and tasks. They are used to orchestrate multi-step processes across multiple nodes.

Advanced Features

Variables

Variables in Ansible can be defined at multiple levels (e.g., in playbooks, inventory files, or even external files). Here’s an example of defining variables in a playbook:

 
---
- name: Configure web server
  hosts: webservers
  vars:
    nginx_port: 8080
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present
    - name: Configure Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
    - name: Start Nginx
      service:
        name: nginx
        state: started

Templates

Templates allow you to manage configuration files with dynamic content using the Jinja2 templating engine. Here’s an example of an Nginx configuration template (nginx.conf.j2):

server {
    listen nginx_port;
    server_name _;
    location / {
        proxy_pass http://localhost:3000;
    }
}

Best Practices

  1. Use Version Control: Keep your playbooks, roles, and inventories in a version control system like Git.
  2. Test Changes: Use a testing framework like Molecule to test your roles and playbooks.
  3. Document Your Code: Write clear and concise documentation for your playbooks and roles.
  4. Follow the Principle of Least Privilege: Use become judiciously and limit the use of privileged commands.

Conclusion

Ansible is a powerful tool that can simplify and automate complex IT tasks, saving time and reducing errors. By following this guide, you can start using Ansible to manage your infrastructure efficiently. As you gain more experience, you'll discover many advanced features and best practices that can further enhance your automation workflows. Happy automating!

Image placeholder

Nirmesh Mashru

Nirmesh is Founder & CEO at QuickDIV, a leading IT solutions provider renowned for its cutting-edge technology and customer-centric approach. With over 8+ years of experience in the tech industry.

Subcribe to our Newsletter

Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in