С главной запускаются обычные процессы каталога. Главная передаёт процессу сущность, для которой он выполняется, и контекст запуска — данные о выбранных на экране объектах. Процесс читает контекст в шаблонах параметров, действий и правил обновления сущностей.
Процессы для главной создаются так же, как любые другие процессы: в редакторе процессов. Затем процесс добавляется в слот действия или действие по шаблону в правилах маппинга.
Запуск процесса с главной
Все сценарии главной завершаются окном «Запустить процесс». В заголовке окна отображается название сущности, для которой запускается процесс.
Окно запуска работает так же, как при запуске процесса из каталога:
- если в слоте несколько процессов, пользователь выбирает процесс в списке; если процесс один, он выбран автоматически;
- по умолчанию отображаются только параметры процесса с признаком показа в упрощённой форме и незаполненные обязательные параметры. Переключатель «Все параметры процесса» открывает все параметры и конфигурацию задач;
- значения по умолчанию параметров отображаются как есть, в том числе шаблоны вида
{{ .context.environment.slug }}. Шаблоны вычисляются при запуске процесса.
После нажатия «Запустить» отображается уведомление «Процесс “{name}” запущен».
Если обязательный параметр после вычисления шаблона остался пустым, например ключа нет в контексте, процесс не запускается и отображается ошибка «Не удалось запустить процесс».
Если у пользователя нет разрешения control:processes, отображается ошибка «Запрещено политиками доступа».
Контекст запуска
Контекст запуска доступен в шаблонах процесса через корень .context: в значениях по умолчанию параметров процесса, в телах действий, в правилах создания и обновления сущностей, в условиях шлюзов и циклах.
Сущности в контексте передаются в едином формате:
name: <название сущности>
slug: <идентификатор сущности>
uuid: <UUID сущности>
properties:
<идентификатор параметра>: <значение>Ключи properties — идентификаторы параметров сущности в каталоге, а не роли маппинга. Например, домен окружения в каноничной модели читается как .context.environment.properties.domain.
Примеры обращения к контексту:
{{ .context.environment.slug }}
{{ .context.microservice.name }}
{{ with .context.environment.properties.domain }}{{ $.context.microservice.slug }}.{{ . }}{{ end }}В значениях параметров процесса отсутствующий ключ контекста вычисляется в пустую строку, а в телах действий и условиях завершает шаг ошибкой. Поэтому читайте контекст в значениях по умолчанию параметров процесса, а в действиях используйте параметры процесса. Подробнее — в разделе «Шаблонизация».
Сущность и контекст по сценариям
В таблице перечислены сценарии главной, сущность запуска (.entity) и ключи контекста:
| Сценарий | Слот | Сущность запуска | Ключи .context |
|---|---|---|---|
| Создание микросервиса | Действие по шаблону create_microservice | Выбранная система | microservice, repository, system, template |
| Обновление микросервиса из шаблона | Действие по шаблону upgrade_service_from_template | Микросервис | template, upgrade, review |
| Развёртывание микросервиса на окружение | deploy_microservice или действие по шаблону | Микросервис | environment, microservice, system |
| Удаление микросервиса с окружения | delete_microservice или действие по шаблону | Микросервис | environment, microservice, system |
| Заказ ресурса | order_resource | Выбранная система | environment, system |
| Удаление общего ресурса | delete_shared_resource | Общий ресурс | system |
| Подключение и отключение общего ресурса | connect_shared_resource, disconnect_shared_resource | Общий ресурс | deployment, environment, system, microservice |
| Создание окружения | create_environment | Первое по названию окружение, если окружений нет — первая по названию система | Не передаётся |
| Удаление окружения | delete_environment | Окружение | Не передаётся |
Ключ system передаётся, если на экране выбрана система. Ключ microservice при подключении и отключении общего ресурса передаётся, если у развёртывания найден микросервис.
При создании окружения сущность запуска не связана с создаваемым окружением: .entity в таком процессе указывает на существующее окружение или систему.
Данные нового окружения процесс получает из собственных параметров, которые заполняет пользователь.
При удалении общего ресурса в разделе «Заказ ресурсов» ключ system содержит систему, выбранную в заголовке раздела.
Создание микросервиса
Мастер «Создать микросервис» передаёт процессу контекст следующей структуры:
| Путь | Значение |
|---|---|
.context.microservice.name | Название микросервиса |
.context.microservice.slug | Идентификатор микросервиса |
.context.repository.default_branch | Значение настройки «Ветка по умолчанию» реестра шаблонов, при пустой настройке — main |
.context.repository.description | Описание репозитория, может быть пустым |
.context.repository.namespace | Выбранное пространство в системе контроля версий: id (значение роли vcs_namespace_id), name, slug, uuid |
.context.system | Выбранная система в формате сущности |
.context.template.id | Идентификатор шаблона |
.context.template.version | Выбранная версия шаблона |
.context.template.source | Название реестра, из которого получен шаблон |
.context.template.language | Язык шаблона |
.context.template.values | Значения параметров шаблона с шага «Параметры». Параметры с аннотацией x-ddp-from не передаются |
Параметры шаблона с аннотацией x-ddp-from заполняются из этого же контекста при создании репозитория. Подробнее — в разделе «Пакет шаблона».
Обновление микросервиса из шаблона
Кнопка «Обновить» в карточке микросервиса и автоматическое обновление передают процессу одинаковый контекст:
| Путь | Значение |
|---|---|
.context.template.id | Идентификатор шаблона микросервиса |
.context.template.version | Целевая версия шаблона — последняя доступная |
.context.upgrade.strategy | Стратегия обновления: значение роли microservice_binding_template_upgrade_strategy микросервиса, если оно задано, иначе стратегия из пакета шаблона |
.context.upgrade.overwrite | Перезаписываемые пути: значение микросервиса или пакета |
.context.upgrade.add_if_missing | Добавляемые пути: значение микросервиса или пакета |
.context.review.title | Заголовок запроса на слияние: Upgrade <template_id> to <version> |
Как выполняется обновление, описано в разделе «Обновление из шаблона».
Отображение результата
Главная отслеживает запущенные процессы и показывает их состояние, пока процесс выполняется. Уведомления о завершении процесса не отображаются; итог выполнения пользователь видит в панели «Мои активности».
Во время выполнения процесса:
- в верхней части главной отображается строка «Выполняются процессы: {count}», для процессов на согласовании — «Ожидают согласования: {count}», для процессов других пользователей — «Запустили: {initiators}»;
- строка или карточка объекта, над которым выполняется процесс, отмечается индикатором и подписью «выполняется», а её кнопки действий недоступны;
- для создаваемого объекта отображается временная строка или карточка с подписью «создаётся».
Главная проверяет состояние запусков с интервалом от 2 до 15 секунд. Отслеживание прекращается по завершении процесса, по истечении тайм-аута процесса или, если тайм-аут не задан, через 30 минут. Приостановленные процессы и процессы, ожидающие согласования, отслеживаются без ограничения по времени. Состояние запусков загружается с сервера, поэтому индикаторы сохраняются после перезагрузки страницы и видны другим пользователям.
После завершения процесса разделы «Системы», «Микросервисы», «Развертывание систем», «Заказ ресурсов» и «Окружения» загружают данные заново, и временная строка заменяется созданным объектом.
Соглашения для процессов
Временная строка заменяется созданным объектом, только если объект появился в каталоге и совпал с ожидаемым. Чтобы результат отображался сразу после завершения процесса, выполните следующие условия:
- добавьте в конец процесса задачу синхронизации источника данных или создания сущности. Иначе объект появится на главной только после следующей синхронизации источника данных;
- в процессе создания окружения назовите параметр с идентификатором окружения
slug. По значению этого параметра главная строит временную строку и находит созданное окружение; - в процессе развёртывания микросервиса создавайте развёртывание с названием, совпадающим с названием микросервиса;
- в процессе заказа ресурса предлагайте название ресурса вида
<идентификатор системы>-<идентификатор окружения>. Если пользователь изменит название, временная строка исчезнет по завершении процесса.
Процессы наборов данных
Набор данных «Каноничная архитектура» и связанные с ним наборы создают готовые процессы для слотов главной. Их можно использовать как образец собственных процессов.
| Процесс | Набор данных | Слот | Контекст и параметры |
|---|---|---|---|
| «Создать микросервис из шаблона» | «Реестр шаблонов микросервисов» | Действие по шаблону create_microservice | Задачи «Создание проекта GitLab», «Создание репозитория из шаблона», «Регистрация entity microservice». Параметр «Группа GitLab» — {{ with .context.repository.namespace }}{{ .id }}{{ end }} |
| «Обновить микросервис из шаблона» | «Реестр шаблонов микросервисов» | Действие по шаблону upgrade_service_from_template | Задачи «Обновление репозитория из шаблона» и «Создание код-ревью» |
| «Развернуть микросервис на окружение» | «Реестр шаблонов микросервисов» | Действие по шаблону deploy_microservice | Параметр environment — {{ .context.environment.slug }}. Хост Ingress — <идентификатор микросервиса>.<домен окружения> |
| «Удалить микросервис с окружения» | «Реестр шаблонов микросервисов» | Действие по шаблону delete_microservice | — |
| «Создать окружение» | «Управление окружениями» | create_environment | Параметры «Идентификатор» (slug) и «TTL» |
| «Удалить окружение» | «Управление окружениями» | delete_environment | Параметр «Идентификатор окружения» — {{ .entity.slug }} |
| «Подключить секреты к приложению», «Отключить общий ресурс» | «Привязка общих ресурсов» | connect_shared_resource, disconnect_shared_resource | — |
| Процессы заказа и удаления managed-сервисов | «Deckhouse managed PostgreSQL», «Deckhouse managed Valkey», «Deckhouse managed Kafka» | order_resource, delete_shared_resource | — |
Процесс «Создать окружение» создаёт неймспейс Kubernetes с лейблами DDP. Параметр «TTL» принимает значения «1 день», «3 дня», «7 дней», «14 дней», «1 месяц» и записывается в лейбл ddp.deckhouse.io/deletion-ttl; пустое значение создаёт постоянное окружение.
DDP не удаляет окружения по TTL самостоятельно: лейбл предназначен для внешнего механизма очистки кластера.
Процесс «Удалить окружение» удаляет неймспейс со всеми развёртываниями, ожидает его удаления до 5 минут и обновляет каталог.
Пример добавления собственного процесса — в разделе «Собственный процесс заказа ресурса».