Loops in Playbooks - Ansible Tutorial
Introduction
Ansible is a powerful IT automation tool. It can automate repetitive tasks, deploy applications, and manage configurations. One of the key features of Ansible is the ability to use loops in playbooks. Loops allow you to repeat a task multiple times with different parameters. This tutorial will guide you through the various types of loops available in Ansible playbooks.
Basic Loop
The simplest form of a loop in Ansible is the loop keyword. This allows you to iterate over a list of items.
Example:
- name: Install multiple packages
apt:
name: "{{ item }}"
state: present
loop:
- git
- curl
- vim
This playbook will install the packages git, curl, and vim on the target hosts.
Loop with Dictionaries
You can also loop over a list of dictionaries. This is useful when you need to repeat a task with multiple parameters.
Example:
- name: Create multiple users
user:
name: "{{ item.name }}"
state: present
groups: "{{ item.groups }}"
loop:
- { name: 'alice', groups: 'admin' }
- { name: 'bob', groups: 'users' }
This playbook will create two users, Alice and Bob, with different group memberships.
Loop Control
Ansible provides several ways to control the loop execution. You can use the loop_control keyword to modify the loop behavior.
Example:
- name: Install multiple packages with index
apt:
name: "{{ item }}"
state: present
loop:
- git
- curl
- vim
loop_control:
index_var: loop_index
In this example, the index_var is used to keep track of the current index in the loop.
Nested Loops
Sometimes, you may need to use nested loops to iterate over multiple lists simultaneously.
Example:
- name: Deploy applications to multiple hosts
hosts: "{{ item.0 }}"
tasks:
- name: Deploy application
copy:
src: "{{ item.1.src }}"
dest: "{{ item.1.dest }}"
with_subelements:
- "{{ applications }}"
- "hosts"
This example demonstrates how to deploy multiple applications to multiple hosts using nested loops.
Registering Variables with Loops
You can register the output of each iteration to a variable, which can then be used later in the playbook.
Example:
- name: Check disk usage
command: df -h
register: disk_usage
ignore_errors: yes
loop:
- /
- /home
- /var
- name: Print disk usage
debug:
var: disk_usage.results
This playbook checks the disk usage for multiple directories and registers the output which is then printed using the debug module.
Conclusion
Loops in Ansible playbooks provide powerful capabilities to automate repetitive tasks with ease. You can loop over simple lists, dictionaries, nested lists, and even control the loop execution behavior. Understanding and utilizing loops effectively can significantly enhance the efficiency of your playbooks.
