🛠️ Ansible playbook при повторном запуске снова сообщает changed, хотя система уже должна быть в нужном состоянии.

Это не всегда ошибка: первый запуск или реальная правка конфигурации как раз должны давать changed. Но если при тех же входных данных playbook каждый раз «что-то меняет», команда перестаёт понимать, где настоящее изменение, а где шум.

Что проверить:

Модули Если задача написана через shell или command, Ansible выполняет произвольную команду и не всегда сам понимает, изменила ли она состояние. Где возможно, используйте специализированные модули.

Условия запуска Команда не должна выполняться каждый раз без проверки состояния. Для command и shell могут помочь условия, creates, removes или результат предыдущей задачи.

changed_when Если команда нужна, но её вывод не всегда означает изменение, явно задайте, когда задача должна считаться изменившей систему.

Шаблоны Случайные значения, текущая дата, нестабильный порядок элементов, пробелы и переносы строк могут менять итоговый файл при каждом запуске.

Handlers Если задача каждый раз сообщает changed, она может снова уведомлять handler. В одном этапе одинаковый handler обычно выполнится один раз, но при каждом новом запуске playbook сервис может перезапускаться без причины.

Check mode и diff mode Они помогают увидеть, что Ansible собирается изменить. Но не все модули поддерживают их одинаково, check mode не заменяет тестовую среду, а diff может показать чувствительные данные.

Практический вывод: хороший playbook не только выполняет задачу, но и честно показывает, что он изменил.

На обучении по Ansible такие ситуации разбираются на практике: модули, условия, шаблоны, handlers, check mode и проектирование идемпотентных playbook.

🔹🔹🔹🔹

🛠️ Ansible playbook при повторном запуске снова сообщает changed, хотя система уже должна быть в нужном состоянии | Сетка — социальная сеть от hh.ru