loop нужен вот прям всегда и везде. Но это не так.ㅤ
Многие пишут:
- name: install packages
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: yes
loop: "{{ packages }}"
А переменная
packages содержит список пакетов на установку.И вроде тут всё ок, НО
apt вызывается для каждого пакета отдельно, а update_cache может дёргаться несколько раз. Это избыточно и ломает заложенные паттерны.Поэтому правильнее будет сделать так:
- name: install packages
ansible.builtin.apt:
name: "{{ packages }}"
state: present
update_cache: yes
Здесь
apt получает сразу список пакетов, кеш обновляется один раз, установка идёт одной транзакцией. Получается меньше оверхеда, всё происходит быстрее и логичнее.В первом случае это «хак», ты делаешь
loop из одного элемента, внутри которого уже лежит список.Главная мысль тут — если модуль умеет принимать список —
loop нахуй не нужен.Loop нужен там, где логика на каждый элемент отдельная:
- разные параметры
- условия
- шаблоны
- создание пользователей
- файлы
- сложные таски
Короче не заLOOPайся и будет тебе счастье.
Ну а если хочешь стать гуру, я всегда жду тебя здесь.
🛠 #devops #linuxfactory #ansible
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog