Ansible best practice. Жизнь без loop
Когда начинаешь вкатываться в Ansible, кажется что 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айся и будет тебе счастье.
Ну а если хочешь стать гуру, я всегда тебя жду здесь.
