Open In App

How to Use Loops in Ansible for Efficient Automation

Last Updated : 12 Jul, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

In the realm of DevOps and IT automation, Ansible is a very strong tool utilized for automating the provision, configuration, and management of systems. One key feature of Ansible is the execution of tasks in an effective and repeatable manner through the use of loops, with the implementation of loops, users can perform repetitive tasks over a sequence of items or datasets, making playbooks much less complex and significantly shorter.

In this article, we will learn about using loops within Ansible to make our automation task more effective and scalable. Some major terminologies, a step-by-step guide, and some examples have been shown. By the end of this article, you will have a good grasp of how loops in Ansible can make your automation workflows much easier to manage.

Primary Terminologies

  • Playbook: A playbook is an Ansible configuration file that contains a set of plays to be applied to corresponding hosts in the inventory.
  • Task: A task is an atomic unit of action within an Ansible playbook. They are individually executed one after the other, and a task can be anything from installing a package to creating a file or managing a service.
  • Module: An Ansible module is an independent script that runs under Ansible, which by itself manages system resources such as packages, files, and services.
  • Loop: A loop will execute a given task multiple times for different items with Ansible. The same thing can be achieved with the constructs such as loop, with_items, or with_dict.
  • Loop Variable: A loop variable is a placeholder for the item in a collection that gets iterated through. Most commonly, the loop variables will be item for lists or item.key, item.value if the items are dictionaries.
  • List: A list would be defined as a data structure that contains several elements. In Ansible, lists are defined to hold many values through a task in which it has to loop through.

Example:

- name: Example Playbook for Installing Packages
hosts: all
become: yes
vars:
packages:
- httpd
- mariadb
- php
tasks:
- name: Install packages using loop
yum:
name: "{{ item }}"
state: present
loop: "{{ packages }}"

Dictionary

  • A dictionary is a data structure that contains key-value pairs. Dictionaries within Ansible are used to map keys with their respective values. It can traverse using loops.

Example:

- name: Example Playbook for Creating Users
hosts: all
become: yes
vars:
users:
alice:
password: encrypted_password_for_alice
bob:
password: encrypted_password_for_bob
tasks:
- name: Create users using loop with_dict
user:
name: "{{ item.key }}"
state: present
password: "{{ item.value.password }}"
with_dict: "{{ users }}"
loop_control:
label: "Creating user {{ item.key }}"

loop_control

  • loop_control is an Ansible directive providing further control for loops. For example with custom labelling to each iteration.

Example

loop_control:  
label: "Creating user {{ item.key }}"

Conditional Statements

  • Conditional expressions in Ansible (when) allow you to execute tasks only when given conditions are met. These can be combined with loops to apply tasks conditionally based on the loop variable.

Example:

when: item == 'httpd'

Step by Step Process Using Loops in Ansible for Efficient Automation

The following are the steps that helps in guiding on how to use ansible for efficient automation:

Step 1: Launch EC2 instance

  • Go to AWS Console and login with credentials
  • Navigate to EC2 Dashboard and launch an ec2 instance
Listing instances

Step 2: Install Ansible

  • Now install ansible in our local machine
sudo amazon-extras-linux install ansible2 -y
Installing ansible

Step 3: Define Inventory file or host file

  • In this host file we need to provide host details like IP address, Host name and keypair details.
Defining inventory

Step 4: Create Playbook Using Loops

Example Playbook: Using Loops in Ansible

Explanation

- name: Example Playbook with Loops
hosts: all
become: yes
vars:
packages:
- httpd
- mariadb
- php
users:
alice:
password: encrypted_password_for_alice
bob:
password: encrypted_password_for_bob
tasks:
- name: Install packages using loop
yum:
name: "{{ item }}"
state: present
loop: "{{ packages }}"

- name: Create users using loop with_dict
user:
name: "{{ item.key }}"
state: present
password: "{{ item.value.password }}"
with_dict: "{{ users }}"
loop_control:
label: "Creating user {{ item.key }}"

Install Packages

  • The yum module installs packages like: httpd, mariadb, php on targeted hosts.
  • loop: Loops through the defined list of packages.

Create Users

  • The user module generates users (e.g. alice, bob) on the provided hosts.
  • with_dict: Used to iterate over a dictionary where keys are usernames and values are the respective encrypted passwords.
  • control_structure: Which enables you to have even better control over the loops in which you are able to give a label for every iteration.
Creating Playbook

Step 5: Execute Playbook

  • Execute the playbook using the ansible-playbook command:
ansible-playbook <playbook name>
Executing playbook
  • Here we see that Packages was installed in loop mood like one by one

Conclusion

Using loops in Ansible beefs up your automation tasks with efficiencies and scalability that are very significant. On using loops, you will have a way of reducing duplication in the activities you perform, making things consistent across all configurations of the same kind, and lowering playbook complexity, whether it's installing packages, creating users, or system configuration, loops help you deal with multiple items in a very concise and orderly manner.

In this article, we have dived into the basic ideas and terminologies that are associated with loops in Ansible, we have demonstrated detailed examples of working with loops to automate everyday tasks, indicating best practices and practical uses. Now you can optimize your Ansible playbooks to ensure your automation processes remain robust and maintainable.



Next Article
Article Tags :

Similar Reads