🛠️ 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.
🔹🔹🔹🔹