Ответ
Циклы (Loops) в Ansible позволяют повторять выполнение задачи для каждого элемента в списке или словаре, что устраняет дублирование кода. Основной и рекомендуемый способ — использование директивы loop.
Основные типы циклов:
loop(современный):- name: Ensure multiple users exist ansible.builtin.user: name: "{{ item }}" state: present groups: "developers" loop: - alice - bob - charlie- Цикл по списку словарей (часто для пакетов):
- name: Install a list of packages ansible.builtin.apt: name: "{{ item.name }}" state: "{{ item.state | default('present') }}" loop: - { name: 'nginx', state: 'latest' } - { name: 'postgresql', state: 'present' } - { name: 'old_package', state: 'absent' } -
Цикл с регистрацией результата каждой итерации:
- name: Create directories for app logs ansible.builtin.file: path: "/var/log/{{ item }}" state: directory loop: "{{ ['app1', 'app2', 'app3'] }}" register: dir_creation_results - name: Debug results ansible.builtin.debug: var: dir_creation_results.results
Управление циклом (loop_control):
- name: Configure services with readable output
ansible.builtin.service:
name: "{{ item }}"
enabled: true
loop:
- docker
- ssh
loop_control:
label: "Enabling service: {{ item }}" # Скрывает содержимое item в выводе
pause: 2 # Пауза в 2 секунды между итерациями (например, для graceful restarts)
Циклы — фундаментальный инструмент для создания гибких и поддерживаемых плейбуков, особенно при работе с динамическими списками из переменных или результатов предыдущих задач.