jayakrishna's Ansible Documentation

Introduction

Ansible is an open-source automation tool that simplifies IT orchestration, configuration management, and application deployment. It enables you to automate repetitive tasks, manage complex infrastructures, and streamline workflows.

Installation

To install Ansible, you can use your system's package manager or install it via Python's package manager, pip.

$ sudo apt-get install ansible

Getting Started

Once installed, you can start using Ansible to manage your infrastructure. Begin by configuring Ansible and setting up your inventory file to define the hosts you want to manage.

$ sudo nano /etc/ansible/hosts

Playbooks

Playbooks are Ansible's configuration, deployment, and orchestration language. They allow you to define your infrastructure as code, making it easier to manage and replicate configurations across multiple hosts.

Below is an example playbook to install and configure Apache web server:


---
- name: Install and configure Apache
  hosts: web_servers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
      become: yes

    - name: Start Apache service
      service:
        name: apache2
        state: started
      become: yes

    - name: Enable Apache service
      service:
        name: apache2
        enabled: yes
      become: yes
            

Modules

Modules are reusable, standalone scripts that perform specific tasks on managed nodes. Ansible provides a wide range of modules to automate various operations such as package management, file manipulation, user management, and more.

Commonly used modules include:

Roles

Roles are a way to organize and reuse Ansible code. They allow you to encapsulate tasks, handlers, variables, and other files into reusable units, making your playbooks more modular and maintainable.

Here's an example directory structure for an Ansible role:


my_role/
├── defaults/
│   └── main.yml
├── tasks/
│   └── main.yml
├── handlers/
│   └── main.yml
├── templates/
├── files/
├── vars/
├── meta/
│   └── main.yml
└── README.md
            

Ansible Role File Structure

  • my_role/: Represents the main directory of the Ansible role.
    • defaults/: Directory containing default variables for the role.
      • - main.yml: File containing default variables. These variables are used if no other value is provided.
    • tasks/: Directory containing main tasks for the role.
      • - main.yml: File containing main tasks. These tasks define the actions the role will perform.
    • handlers/: Directory containing handlers triggered by tasks.
      • - main.yml: File containing handlers. Handlers are tasks that are triggered by other tasks, typically to restart services or perform other actions.
    • templates/: Directory containing Jinja2 templates for generating configuration files.
      • Jinja2 templates for generating configuration files. These templates allow you to generate configuration files dynamically, based on variables or conditions.
    • files/: Directory containing files to be copied to managed nodes.
      • These files are copied to the managed nodes as-is, without modification.
    • vars/: Directory containing role-specific variables.
      • - main.yml: File containing role-specific variables. These variables are specific to the role and can be used to customize its behavior.
    • meta/: Directory containing metadata including dependencies.
      • - main.yml: File containing metadata, such as dependencies. This file specifies information about the role, such as its dependencies on other roles.
    • README.md: Documentation for the role.
      • This file contains documentation for the role, including information on how to use it, its purpose, variables, and any other relevant details. It's typically written in Markdown format for easy readability.

Best Practices

Follow these best practices to ensure efficient and maintainable Ansible code: