Tags и --limit в Ansible: как перестать ждать и запускать только нужное
В пятницу вечером нужно было срочно поправить конфиг на одном из 50 продакшен-серверов. Я запустил плейбук. И понял, что следующие 20 минут буду просто сидеть и смотреть, как Ansible перебирает все роли, хотя менять надо было всего одну строчку.
Предыстория
У меня пара десятков плейбуков. Некоторые раскиданы на 200-300 строк. Когда ты дергаешь их целиком, даже простой рестарт nginx превращается в многосерийный сериал. Раньше я просто терпел: запустил — пошёл пить кофе.
Но однажды прилетела задача: на одном инстансе сменить DNS, а на соседнем — не трогать. Я вспомнил, что в документации видел параметры, и решил разобраться.
Проблема
Боль — когда нужно сделать одно маленькое изменение, а Ansible честно прогоняет проверку прав, установку зависимостей, перезагрузку сервисов и синтаксис. Это не просто медленно. Это ломает ритм работы.
Ты ждёшь, отвлекаешься, забываешь, что именно правил. А если плейбук упал на середине из-за неважной ошибки в другом таске — тратишь время на расследование.
Лучше запустить один таск за 5 секунд, чем весь плейбук за 15 минут и получить проблему на ровном месте.
Почему это важно
Для DevOps это вопрос денег. Большие плейбуки жрут процессор, сеть и время, когда сервер под полной нагрузкой. Каждая секунда простоя или ожидания — это потеря для бизнеса.
Когда нужно быстро подкрутить переменные в окружении или перечитать конфиг, ты не можешь позволить себе ждать. Срочные правки должны быть срочными.
Решение
В Ansible есть два мощных инструмента: tags и --limit. Я начал добавлять теги к каждому таску и роли: config, restart, debug, security. Это заняло один вечер переписывания плейбука.
А потом я просто начал запускать:
- 💡 ansible-playbook site.yml --tags config — только конфигурационные файлы
- 🚀 ansible-playbook site.yml --limit web-3 — только один сервер
- 🔧 ansible-playbook site.yml --tags restart --limit web-5 — сброс сервиса на конкретной машине
Теги работают как ярлыки: ты выбираешь только те таски, которые нужны сейчас. --limit сужает хосты. Всё остальное Ansible пропускает.
Результат
Я перестал ждать. Теперь любая точечная правка занимает 5-10 секунд вместо 20 минут. Плейбуки стали короче, читаемее. Я точно знаю, какой таск что делает.
И главное — срочные фиксы перестали быть стрессом. Я просто запускаю нужный тег на нужном хосте и получаю результат. Без лишних телодвижений.
📬 Свяжитесь с нами
Хотите внедрить это в своем бизнесе? Пишите нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro