ADG Оставить заявку
Блог Автоматизация 5 мин чтения

Ansible Tower 3.3: Workflow Templates и цепочки плейбуков с ветвлением

Ansible Tower 3.3 добавил Workflow Templates - визуальный граф плейбуков с ветвлением по успеху/ошибке. Провизионирование, конфигурация и smoke-тест теперь единый управляемый поток.

Контекст момента

Ansible Tower 3.3 выпустил Workflow Templates с ветвлением по on_success/on_failure и улучшенный RBAC с гранулярными разрешениями на уровне организации, inventory и отдельных шаблонов

Долгое время наш деплой в Tower выглядел так: кнопка запуска одного Job Template, который делал всё подряд - провизионирование, конфигурацию, рестарт сервисов. Один большой плейбук на двести задач, который выполняется линейно. Если на шаге 150 падала конфигурация nginx, плейбук останавливался, но всё что было до - уже применено. Состояние хоста оказывалось в полупровизионированном виде, и следующий запуск нужно было делать с умом, чтобы не задублировать.

Tower 3.3 добавил Workflow Templates - и это меняет подход к организации автоматизации на уровне архитектуры.

Что такое Workflow Template

Это граф Job Template-ов с ветвлением. Каждый шаг - это существующий Job Template со своим плейбуком, инвентарём и переменными. Между шагами проводятся рёбра: on_success и on_failure. То есть:

  • Шаг 1 - провизионирование запускается первым.
  • Шаг 2 - конфигурация запускается только если шаг 1 успешен.
  • Шаг 3 - smoke-тест запускается только если шаг 2 успешен.
  • Шаг 4 - rollback запускается только если шаг 2 или 3 упали.

Это не просто «запустить плейбуки последовательно». Это условная логика без написания кода условий - прямо в UI Tower, через визуальный редактор.

Граф можно ветвить и объединять: два параллельных шага конфигурации (скажем, настройка приложения и настройка мониторинга-агента) сходятся в один шаг дымового теста. Tower параллелит их самостоятельно.

Как это выглядело на конкретной задаче

У нас есть managed-клиент с периодическим деплоем сервисов на несколько групп серверов. До 3.3 деплой делался одним большим плейбуком, который последовательно поднимал зависимости, раскатывал приложение и делал curl-проверку. Это работало, но у плейбука был неудобный интерфейс перезапуска при сбое: нужно было смотреть на какой таске упало, вручную выставлять --start-at-task или комментировать уже выполненные части.

С Workflow Template деплой стал выглядеть как три отдельных Job Template:

Первый - provision-base: устанавливает пакеты, создаёт пользователей, монтирует диски. Идемпотентный, безопасно гонять повторно. Запускается на [new_hosts] группу.

Второй - configure-app: раскатывает конфиг из шаблонов, кладёт артефакт сборки, рестартует сервис. Запускается только при успехе первого.

Третий - smoke-test: простой плейбук с uri модулем, который делает несколько HTTP-запросов к задеплоенному приложению и проверяет коды ответов и ключевые паттерны в теле ответа.

Если smoke-test падает - срабатывает on_failure ребро к четвёртому шагу: notify-oncall, который через Slack-модуль отправляет сообщение с деталями упавшего job-а. Rollback не автоматизирован - это осознанное решение, потому что автоматический rollback в нашем случае опаснее ручного вмешательства. Но факт падения с контекстом прилетает сразу.

Весь этот граф запускается одной кнопкой или по webhook-у из CI. Tower отображает прогресс по каждому шагу прямо в визуальном редакторе - видно что выполнилось, что в процессе, что упало.

RBAC: что изменилось в 3.3

Второй крупный блок обновления - гранулярность прав. В прошлых версиях Tower RBAC работал на уровне организации: пользователь либо Admin, либо User с ограниченными правами. В 3.3 права можно раздавать на уровне:

  • отдельного Job Template (запуск но не редактирование, или только просмотр)
  • Workflow Template (аналогично)
  • конкретного Inventory (чтение, обновление, использование в шаблонах)
  • Credential (только использование - пользователь может запускать шаблоны, которые используют credential, но не видит его содержимое)

Для enterprise это существенно. У клиента есть несколько команд: команда платформы (пишет и редактирует плейбуки), команда эксплуатации (запускает деплой на продакшн), команда разработки (запускает деплой на staging). Раньше чтобы дать разработчикам возможность самим катить на staging - нужно было либо делать отдельный Tower, либо давать слишком широкие права.

Сейчас это решается через роли: Dev-team получают роль execute на Workflow Template, который направлен на staging-инвентарь. На продакшн-инвентарь у них нет прав вообще. Команда эксплуатации получает execute на продакшн-шаблоны. Команда платформы - admin на всё. Всё это управляется через Tower UI или API, и аудит кто что запускал пишется в лог автоматически.

Credential-permissions - отдельная ценная вещь. SSH-ключи для продакшна лежат в Tower как Machine Credential. Команда разработки не может их выгрузить или посмотреть, но шаблон может ими воспользоваться при запуске. Это лучше чем раздавать ключи в файлах.

Что стало неудобным

Workflow Template удобен когда плейбуки уже разбиты на логические единицы. Если у вас один большой плейбук на пятьсот задач - workflow из него не сделать без предварительного рефакторинга. Нам пришлось потратить время на разбивку перед тем как пользоваться новым функционалом.

Ещё момент: Workflow Template не может передавать переменные между шагами напрямую. Если шаг 1 что-то вычисляет (например, IP-адрес созданной машины) и это нужно шагу 2 - это надо решать через общий инвентарь или через артефакты во внешнем хранилище. Встроенного механизма пайплайн-переменных нет, и это иногда ощущается.

Где мы сейчас

Для клиентских инсталляций, где деплой состоит из нескольких логически отдельных фаз, Workflow Templates - это первое что мы теперь настраиваем. Разбивка на провизионирование + конфигурация + проверка даёт понятный журнал: видно на каком именно шаге что-то пошло не так, а не в каком месте большого плейбука.

RBAC в 3.3 дорос до состояния, при котором Tower можно давать разным командам с разными уровнями доступа - это делает его реально корпоративным инструментом, а не просто красивым фронтендом к Ansible.

Есть ещё момент с Ansible Tower и лицензиями - стоимость растёт с количеством управляемых узлов, и для крупных инсталляций это становится заметной статьёй. Но это отдельный разговор, не связанный напрямую с функциональностью 3.3.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.