Simple loop
To create loops the attribute with_items is used to define that the action/task will be performed for all items of some collection/dictionary. Following an example.
vars: my_services: - firewalld - httpd tasks: - name: Start services service: name: "{{ item }}" state: started with_items: "{{ my_services }}"
Check loops
It is possible to check if items are present in groups. Following an example.
- name: Users exist and are in the groups user: name: "{{ item.name }}" state: present groups: "{{ item.groups }}" with_items: - { name: 'camila', groups: 'admin' } - { name: 'allan', groups: 'sales' }
Complex loops
Use the attribute with_nested to create a loop inside another loop. Following an example.
vars: employees: - allan - camila - john mysql_databases: - customerdb - companydb - employeedb - admindb - salesdb tasks: - name: Check if employees has privileges on all databases mysql_user: name: "{{ item[0] }}" priv: "{{ item[1] }}.*:ALL" append_privs: yes password: root with_nested: - "{{ employees }}" - "{{ mysql_databases }}"
For further information check the Loops Ansible docs.