Если демо и обучение проходят регулярно, рано или поздно все начинает упираться в стенды. Их почти всегда просят «как можно быстрее», но на практике подготовка легко растягивается из-за ручных действий, разъехавшихся конфигураций и зависимости от конкретного специалиста.В WMS (Workshop Management System) мы как раз убирали это трение и выстраивали процесс так, чтобы стенд Astra Automation запускался быстро, предсказуемо и без лишней суеты. В итоге получился понятный сценарий: около 10–15 минут на запуск, после чего система уже сама доводит жизненный цикл стенда до завершения. Читать далее
Если демо и обучение проходят регулярно, рано или поздно все начинает упираться в стенды. Их почти всегда просят «как можно быстрее», но на практике подготовка легко растягивается из-за ручных действий, разъехавшихся конфигураций и зависимости от конкретного специалиста.
В WMS (Workshop Management System) мы как раз убирали это трение и выстраивали процесс так, чтобы стенд Astra Automation запускался быстро, предсказуемо и без лишней суеты. В итоге получился понятный сценарий: около 10–15 минут на запуск, после чего система уже сама доводит жизненный цикл стенда до завершения.
На малом количестве стендов ручной подход обычно выглядит вполне терпимо. Но как только у команды в один период сходятся обучение, демо и пилоты, процесс начинает буксовать:
стенды готовятся дольше;
ручные действия повышают вероятность ошибок;
конфигурации перестают быть по-настоящему одинаковыми;
перенос этого подхода на несколько команд превращается в отдельную организационную задачу.
WMS - это полностью управляемый кодом конвейер на базе Astra Automation, включающий в себя ряд этапов:
запрос параметров создаваемого стенда;
развертывание инфраструктуры;
пост-настройка узлов стендов;
выдача доступов;
автоочистка по TTL (time-to-live - "время жизни").
Ключевой момент: пользователь получает не просто набор виртуальных машин, а готовую рабочую среду с необходимыми компонентами и управляемыми узлами.
Под капотом наших стендов находится связка из Ansible, Terraform и Astra Automation.
Ответственность между инструментами разделена так: Terraform создает инфраструктурный слой в облаке (сети, ВМ, диски и состояние стенда), Ansible отвечает за конфигурацию и пост-настройку узлов, а Astra Automation добавляет поверх этого управляемый контур: запуск шаблонов, заполнение исходных параметров, credentials, инвентари, историю выполнения, права доступа и расписания для служебных задач.
Код WMS при этом разделен на два репозитория:
workshop-env — основной "движок" развертывания;
workshop-configs — конфигурационный слой с параметрами окружений и профилями стендов.
В workshop-env хранится все, что отвечает за непосредственное создание стенда, включая Ansible playbook’и, Terraform шаблоны, задачи на создание и удаление стендов, настройку inventory и credentials. Если говорить совсем просто, именно здесь находится логика, по которой стенд разворачивается.
В workshop-configs хранится все, что чаще меняется от сценария к сценарию, включая параметры окружений dev, ci, prod и presale, ID разворачиваемых образов, настройки ресурсов и WID профили. Это репозиторий с данными, который определяет, какой именно стенд нужно получить.
Это удобно в эксплуатации, потому что логику развертывания и пользовательские настройки можно менять по отдельности. Поэтому обновление playbook’ов или Terraform шаблонов в workshop-env не затрагивает профили, а добавление нового WID или набора образов в workshop-configs не требует правок в pipeline.
Если коротко, архитектура репозиториев выглядит так:
Структура репозиториев
workshop-env
├── ansible/
│ ├── playbooks/ # main.yml, provision.yml, cleaner.yml, create_images.yml
│ └── tasks/ # present.yml, absent.yml, render_config.yml, update_images.yml
├── terraform/ # шаблоны инфраструктуры для облака
└── configs/ # настройки объектов Automation Controller
workshop-configs
├── environments/ # dev / ci / prod / presale и их vars.yml
└── wid/ # профили стендов: small, medium, presale-demo и другие
В результате развертывания клиент получает полнофункциональный стенд Astra Automation и преднастроенную среду разработки VS Code.

Архитектура демонстрационного стенда

Диаграмма последовательности создания демо-стенда
Ниже представлены основные шаги, выполняемые при создании стенда пользователя, в порядке их выполнения:
Подготовка необходимых переменных и генерация runtime-конфигурации.
Проверка существования стенда для пользователя - в существующей архитектуре один пользователь может создавать только один стенд.
Создание учетных данных пользователя.
Развертывание ресурсов в облаке через Terraform.
Создание инвентаря в контроллере Astra Automation.
Запуск шаблона с пост-конфигурацией виртуальных машин.
Вывод endpoint-ов и отправка уведомления пользователю в личный кабинет и на электронную почту.
Снаружи все выглядит довольно просто. Пользователь выбирает нужный тип стенда, запускает процесс и через некоторое время получает уже готовое окружение.

Выбор необходимой конфигурации стенда

Процесс создания

Результат развертывания стенда
За простым пользовательским сценарием скрывается несколько автоматизированных этапов: запуск задания в контроллере, подготовка конфигурации, создание ресурсов, пост-настройка и отправка доступа пользователю.
WID по сути служит идентификатором готового профиля стенда. Настроенная нами интеграция передает его в параметре wid, после чего WMS забирает из репозитория workshop-configs нужный YAML файл.
Внутри профиля описывается не вся платформа Astra Automation, а именно дополнительные управляемые узлы, которые должны появиться рядом с базовыми компонентами стенда. За базовый стек с Gateway, Controller, Hub, EDA и DB отвечает общая логика развертывания. WID в этой схеме нужен уже для практической части и определяет, каким именно будет окружение, сколько в нем узлов, какого они размера, на каких образах работают и нужен ли им внешний IP адрес.
Сейчас у нас есть несколько типов WID:
wo-nodes — профиль без дополнительных управляемых узлов, когда нужен только базовый контур Astra Automation;
default и small — минимальный учебный стенд с одним небольшим узлом Astra Linux;
medium, medium-2, medium-4, medium-5 — варианты с одним или несколькими узлами среднего размера;
alse-centos — смешанный стенд с Astra Linux и CentOS;
presale-demo — расширенный пресейл профиль с Astra Linux, CentOS и кастомным сетевым образом Cisco;
custom-config — шаблон для будущих кастомных конфигураций.
Например, в presale-demo можно одновременно поднять Astra Linux, CentOS и кастомный сетевой образ:
Стенд с тремя хостами
---
additional_hosts:
astra:
- name: astra-1
size: large
image_id: < id image with alse-1-7-6 >
has_external_ip: false
centos:
- name: centos-1
size: small
image_id: < id image with centos-stream-9-v20250707 >
has_external_ip: false
custom:
- name: cisco-csr-1
size: large
image_id: < id image cisco-csr1000v >
has_external_ip: false
Это удобно как для демонстраций, так и для практических занятий, где используется смешанная конфигурация стека.
Главный практический трюк здесь в том, что для основных компонентов Astra Automation мы заранее готовим образы виртуальных машин, включая Controller, Hub, DB, EDA и Gateway.
Идея простая:
базовые компоненты уже включены в соответствующие образы;
при создании стенда не тратим время на полную установку с нуля;
основной объем работы приходится на инициализацию и донастройку инфраструктуры.
Важно не перепутать этот подход с ручными снапшотами, которые кто-то когда-то собрал и оставил лежать без изменений. Для стендов у нас есть базовый UBI на основе подготовленного образа Astra Linux из линейки MG образов, а первичная настройка виртуальных машин выполняется через cloud-init. После этого из общей базы получаются отдельные образы под конкретные компоненты платформы, такие как Controller, Execution Node, Hub, DB, EDA и Gateway.
Актуальные идентификаторы образов хранятся не в playbook-е, а в конфигурации окружения workshop-configs/environments/prod/vars.yml . Например, там отдельно задаются:
Структура хранения образов
image_id: "..." # базовый MG-образ Astra Linux
aac_image_id: "..." # образ Controller
exec_image_id: "..." # образ execution node
ah_image_id: "..." # образ Automation Hub
db_image_id: "..." # образ DB
eda_image_id: "..." # образ EDA
gw_image_id: "..." # образ Gateway
При выходе новой версии Astra Automation мы обновляем не весь механизм развертывания, а набор образов. В основном репозитории workshop-env этот сценарий вынесен в отдельный playbook ansible/playbooks/create_images.yml. Он разворачивает стенд с обновленной версией, снимает образы с полученных виртуальных машин и сохраняет их ID. После этого в дело вступает playbook update_images.yml и обновляет соответствующие aac_image_id, ah_image_id, db_image_id, eda_image_id, exec_image_id и gw_image_id в конфигурациях окружений. После этого новые стенды автоматически начинают использовать свежие образы, а основной pipeline остается прежним.
В результате использования такого подхода развертывание типового стенда укладывается примерно в 10-15 минут (против минимальных 50-60 минут ручного поднятия).
если не автоматизировать процесс удаления развернутых ВМ, временные стенды будут жить вечно.
Поэтому в WMS мы разработали cleaner, реализующий следующие функции:
проверка возраста стендов;
рассылка уведомлений: о скором уничтожении стенда и о том, что стенд удален;
удаление просроченных окружений тоже автоматизировано. По умолчанию стенд живет 4 часа, и этого времени обычно хватает, чтобы пройти обучающий сценарий или спокойно провести демо.
Для регулярного запуска автопроцедуры очистки стендов со стороны бэкенда в Astra Automation используется расписание.
С эксплуатационной точки зрения без этого никуда. Если автоочистки нет, демо инфраструктура быстро обрастает временными виртуальными машинами и через какое-то время начинает напоминать кладбище забытых стендов.
В какой-то момент разработанный подход позволяет экономить больше ресурсов, чем сама оптимизация развертывания.
Оказалось, что WMS одинаково хорошо работает в трех мирах:
каждому обучающемуся предоставляется собственный изолированный стенд;
WMS предоставляет минимальный time-to-start;
cleaner реализует автоматическое освобождение ресурсов после практики.
с помощью WMS мы можем быстро запустить стенд для клиента;
архитектура проекта создана таким образом, что мы можем легко добавить новый состав разворачиваемых хостов;
end-to-end демонстрация автоматизации на реальных узлах.
с помощью стендов WMS мы можем проверять работу ansible playbook-ов в повторяемой среде;
сравнение профилей стенда;
меньше "у меня не воспроизводится".
Сравним, как изменились ключевые параметры развертывания после внедрения WMS
Критерий | Ручной подход | WMS |
|---|---|---|
Время запуска | 60+ минут | ~10-15 минут |
Повторяемость | Зависит от исполнителя | Высокая (IaC + templates) |
Масштабирование | Тяжело | Параметрами и профилями |
Жизненный цикл | Ручной контроль | Автоочистка по TTL |
Риск ошибки | Выше | Ниже за счет стандартизации |
Таким образом, благодаря использованию dev-ops практик мы полностью автоматизировали процесс создания учебных стендов Astra Automation и сделали воспроизводимость нормой. Скорость развертывания существенно выросла, ручных операций стало заметно меньше, а поддержка стендов теперь максимально предсказуема.