2 min read

Check mode в Ansible: как проверять плейбуки без риска для прода

Check mode в Ansible: как проверять плейбуки без риска для прода

Вчера вечером я смотрел, как джуниор нажимает Enter, запуская плейбук на продакшене. Он был уверен, что всё пройдёт гладко. Через 10 секунд упал балансировщик.

Предыстория

Год назад я сам допустил похожую ошибку. Писал плейбук для обновления конфигов nginx, проверил синтаксис — всё ок. Запустил на prod, и вместо нового location получил пустой файл. Одна лишняя строчка в шаблоне.

Продакшен лежал 15 минут. Я сидел и переписывал конфиг вручную, проклиная Ansible и себя.

Проблема

Дело не в джуниорах. Дело в уверенности, что код работает так, как задумано. Ansible — идемпотентный инструмент, но это не защищает от ошибок в логике. Типичная ситуация: вы меняете переменную, а она не подхватывается. Или шаблон рендерится криво, но вы это увидите только после apply.

Без проверки вы играете в русскую рулетку с инфраструктурой.

Почему это важно

Каждый лишний downtime — это не только потеря денег, но и доверия клиентов. За 15 минут простоя вы можете потерять заказы, данные или репутацию. А главное — такие ошибки легко отлавливаются до применения.

  • ⚠️ Риск сломать конфиги без возможности откатиться
  • ⏱️ Трата времени на ручное восстановление
  • 💥 Потенциальная потеря сессий или данных

Решение

Check mode (dry-run) в Ansible — это флаг --check. Он запускает плейбук так, как будто вы его применяете, но без реальных изменений. Модули возвращают статус changed, но файлы и сервисы остаются нетронутыми.

Я теперь никогда не запускаю плейбук на prod без предварительного check. Просто добавляю ansible-playbook site.yml --check и смотрю, что изменится. Особенно полезно перед массовыми операциями: обновление БД, смена конфигов, деплой новых ролей.

Чтобы сделать процесс надёжнее, я комбинирую check mode с режимом diff: --check --diff. Это показывает все изменения в файлах до их применения. Вижу каждый добавленный или удалённый параметр.

Я не доверяю плейбуку, который не проверил в dry-run. Это как садиться в самолёт без предрейсового осмотра.

Результат

Сейчас dry-run — часть моего рабочего процесса. Перед каждым запуском я делаю check, смотрю diff, а потом применяю. За полгода у меня не было ни одного инцидента с Ansible, который сломал бы прод.

Джуниоры в команде тоже привыкли. Теперь они сначала запускают --check, а потом подходят ко мне с вопросами. Прод в безопасности, нервы целы.


📬 Свяжитесь с нами

Хотите внедрить это в своем бизнесе? Пишите нам!

Связаться с нами
Telegram
WhatsApp
Email