Skip to main content

Ansible: Infrastructure as Code

Ansible is a powerful open-source automation engine that simplifies and streamlines IT tasks such as:

  • Configuration Management: Ensuring systems are configured consistently.
  • Application Deployment: Automating the deployment of applications.
  • Provisioning: Automating the creation and setup of infrastructure.
  • Orchestration: Coordinating complex workflows across multiple systems.

Key Concepts

  • Playbooks: YAML files that define the tasks to be executed.
  • Roles: A way to organize and reuse Ansible content. Roles encapsulate tasks, variables, and handlers.
  • Inventory: A list of managed nodes (hosts) to be configured.
  • Modules: Reusable units of code that perform specific tasks (e.g., installing packages, managing services).
  • Idempotence: The property of an operation that can be applied multiple times without changing the outcome beyond the initial application. Ansible is designed to be idempotent.
  • Ansible Galaxy: A repository for sharing and downloading Ansible roles and collections.

Benefits of Using Ansible

  • Simple: Uses a human-readable YAML syntax.
  • Agentless: Connects to managed nodes via SSH or WinRM; no agent required.
  • Powerful: Can automate a wide range of IT tasks.
  • Flexible: Supports a wide range of operating systems and platforms, including Linux, Windows, and network devices.
  • Open Source: Free to use and modify.

Basic Usage

  1. Install Ansible:

    # On Debian/Ubuntu
    sudo apt update
    sudo apt install ansible

    #On RedHat/CentOS
    sudo yum install ansible

    #Using pip (cross platform if you have python installed)
    pip install ansible
  2. Create an Inventory File:

    Define the hosts you want to manage in an inventory file (e.g., inventory.ini):

    [webservers]
    webserver1 ansible_host=192.168.1.100
    webserver2 ansible_host=192.168.1.101

    [databases]
    dbserver ansible_host=192.168.1.200
  3. Write a Playbook:

    Create a playbook (e.g., deploy.yml) to define the tasks you want to execute:

    ---
    - hosts: webservers
    become: true #Use sudo
    tasks:
    - name: Install nginx
    apt:
    name: nginx
    state: present
    notify:
    - restart nginx

    handlers:
    - name: restart nginx
    service:
    name: nginx
    state: restarted
  4. Run the Playbook:

    Execute the playbook using the ansible-playbook command:

    ansible-playbook -i inventory.ini deploy.yml

Further Resources