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 из одного элемента, внутри которого уже лежит список.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Главная мысль тут — если модуль умеет принимать список — loop нахуй не нужен.

Loop нужен там, где логика на каждый элемент отдельная:

  • разные параметры
  • условия
  • шаблоны
  • создание пользователей
  • файлы
  • сложные таски

Короче не заLOOPайся и будет тебе счастье.

Ну а если хочешь стать гуру, я всегда тебя жду здесь.

Комментарии