tutorial on using ansible open source for configuration management.

Getting Started with Ansible for Configuration Management What is Ansible? Ansible is an open-source automation tool primarily used for configuration management, application deployment, task automation, and multi-node orchestration. Its simplicity and agentless architecture differentiate it

Written by: David Choi

Published on: January 7, 2026

Getting Started with Ansible for Configuration Management

What is Ansible?

Ansible is an open-source automation tool primarily used for configuration management, application deployment, task automation, and multi-node orchestration. Its simplicity and agentless architecture differentiate it from other configuration management tools. Ansible leverages the power of SSH and is written in Python, making it highly versatile and easy to integrate with existing systems.

Prerequisites for Using Ansible

Before diving into Ansible, ensure that:

  1. Operating System: You’re using a Unix-like operating system (Linux, macOS). Windows is supported through WSL (Windows Subsystem for Linux).

  2. Installation:

    • Python 3.6 or higher should be installed on the control machine since Ansible is a Python-based tool.
    • A target machine or host that needs to be configured must be accessible through SSH.
  3. Understanding of YAML: Ansible configuration files (playbooks) are written in YAML (Yet Another Markup Language). Familiarity will make it easier to write and read playbooks.

Installing Ansible

You can install Ansible using various methods. Below is the most common way using pip:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible

Alternatively, you can also install it using pip:

pip install ansible

To verify the installation, use:

ansible --version

Defining Your Inventory

The inventory file is a key component of Ansible. It defines the hosts and groups of hosts that Ansible can manage. The default inventory file is located at /etc/ansible/hosts.

Example of an inventory file:

[webservers]
192.168.1.10
192.168.1.11

[dbservers]
192.168.1.20

You can also create specific inventory files in various formats, like YAML or JSON, for added flexibility.

Creating Your First Playbook

Playbooks are the files where you define your automation tasks. They are written in YAML format and can contain multiple plays. Here’s a basic example of a playbook to install Nginx on the web servers defined in your inventory.

Create a file named install_nginx.yml:

---
- name: Install Nginx on webservers
  hosts: webservers
  become: yes
  tasks:
    - name: Ensure Nginx is installed
      apt:
        name: nginx
        state: present

    - name: Start Nginx
      service:
        name: nginx
        state: started
        enabled: yes

Running the Playbook

To run your playbook, use the command:

ansible-playbook -i /path/to/inventory install_nginx.yml

The -i flag specifies the path to your inventory file. Ansible will connect to the hosts listed and perform the tasks defined in the playbook.

Understanding the Structure of a Playbook

  1. Name: This is a user-friendly description of what the playbook does.
  2. Hosts: The group of hosts from the inventory where the tasks will be applied.
  3. Become: This allows you to run the tasks with elevated privileges (like sudo).
  4. Tasks: A list of actions that need to be executed on the hosts.

Using Variables in Playbooks

Variables in Ansible allow you to make your playbooks dynamic and reusable. You can define variables within playbooks or in separate variable files.

Example of defining variables in a playbook:

---
- name: Install Nginx with variable
  hosts: webservers
  become: yes
  vars:
    nginx_package: nginx
  tasks:
    - name: Ensure Nginx is installed
      apt:
        name: "{{ nginx_package }}"
        state: present

Roles for Reusability

Roles in Ansible are a mechanism for breaking a playbook into reusable components. Each role can contain its tasks, handlers, variables, files, and templates.

Creating a role named nginx:

ansible-galaxy init nginx

This command generates a directory structure that looks like this:

nginx/
├── defaults
│   └── main.yml    
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

Using Handlers

Handlers are special tasks in Ansible that run when notified by another task. They are useful for tasks that need to be executed only under specific conditions.

Example usage of handlers:

tasks:
  - name: Install Nginx
    apt:
      name: nginx
      state: present
    notify: Restart Nginx

handlers:
  - name: Restart Nginx
    service:
      name: nginx
      state: restarted

Understanding Facts

Ansible facts are variables that contain information about the remote hosts. You can use the setup module to gather facts automatically. This allows you to write smarter playbooks that adapt based on the configuration of the hosts.

To gather facts:

- name: Gather facts
  hosts: all
  tasks:
    - debug:
        var: ansible_hostname

Ansible Vault for Security

Ansible Vault allows you to encrypt sensitive data, such as passwords and secrets, within your playbooks and inventory files. You can create an encrypted file using:

ansible-vault create secret.yml

To edit an encrypted file:

ansible-vault edit secret.yml

You can also pass the vault password file while running playbooks:

ansible-playbook -i /path/to/inventory install_nginx.yml --vault-password-file /path/to/passwordfile

Best Practices for Ansible Playbooks

  1. Keep It Simple: Break complex playbooks into smaller, reusable roles.
  2. Use YAML Properly: Ensure you maintain correct indentation and formats.
  3. Leverage Jinja2 Templates: Generate configuration files dynamically using Jinja2 syntax.
  4. Version Control: Store your playbooks in a version control system like Git.
  5. Use Inventory Groups: Organize your hosts into groups for easier management.

Conclusion

Ansible is an incredible tool for configuration management that simplifies automation. This guide has given you the basic foundations to start with Ansible, from installation to writing playbooks. As you become more familiar with its concepts, dive deeper into advanced topics like orchestration, dynamic inventory, and cloud provisioning to leverage its full potential. Whether you’re managing a single server or hundreds, mastering Ansible will significantly streamline your workflow.

Leave a Comment

Previous

optimizing Raspberry Pi for Nextcloud performance.

Next

best open source infrastructure as code tools for devops teams