Что такое идемпотентность
Вопрос
Интервьюер: «Что такое идемпотентность в Ansible и как вы её обеспечиваете?»
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Определение: повторный запуск не меняет уже настроенную систему
Модули описывают желаемое состояние (`state: present`) и проверяют его сами
`command` и `shell` неидемпотентны: `creates`, `removes`, `changed_when`
Handlers вместо безусловных рестартов
Проверка: двойной прогон или Molecule
Что могут спросить следом
- Как сделать идемпотентным скачивание и распаковку архива?
- Зачем идемпотентность, если плейбук запускают раз в месяц?
Разбор
Образцовый ответ: «Идемпотентность значит, что плейбук можно запустить сколько угодно раз, и если система уже в нужном состоянии, ничего не изменится, changed=0. Добиваюсь этого тем, что описываю состояние, а не действия: apt с state: present, template, service с state: started. Модули сами проверяют, нужно ли что-то делать. Там, где без shell не обойтись, указываю creates или changed_when по выводу команды. Рестарты только через handlers, они срабатывают при реальном изменении. Проверяю двойным прогоном, а для ролей в Molecule это отдельный шаг. Зачем: плейбук становится безопасно перезапускаемым, его можно гонять по расписанию для борьбы с дрейфом, а changed в отчёте снова что-то значит».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.