loop (или устаревший with_items) повторяет task по списку; when — условие выполнения. Вместе собирают гибкие сценарии без копипасты tasks.
Разбор
loop + loop_control для меток в логе.
when на уровне task или include.
- Пустой loop — task пропускается аккуратно.
- Сложные условия выносите в vars для читаемости.
Пример
- name: Ensure packages
ansible.builtin.apt:
name: "{{ item }}"
state: present
loop: [nginx, curl]
when: ansible_os_family == "Debian"
Итог
loop размножает задачу; when фильтрует — база выразительности playbook.