С главной запускаются обычные процессы каталога. Главная передаёт процессу сущность, для которой он выполняется, и контекст запуска — данные о выбранных на экране объектах. Процесс читает контекст в шаблонах параметров, действий и правил обновления сущностей.

Процессы для главной создаются так же, как любые другие процессы: в редакторе процессов. Затем процесс добавляется в слот действия или действие по шаблону в правилах маппинга.

Запуск процесса с главной

Все сценарии главной завершаются окном «Запустить процесс». В заголовке окна отображается название сущности, для которой запускается процесс.

Окно запуска работает так же, как при запуске процесса из каталога:

  • если в слоте несколько процессов, пользователь выбирает процесс в списке; если процесс один, он выбран автоматически;
  • по умолчанию отображаются только параметры процесса с признаком показа в упрощённой форме и незаполненные обязательные параметры. Переключатель «Все параметры процесса» открывает все параметры и конфигурацию задач;
  • значения по умолчанию параметров отображаются как есть, в том числе шаблоны вида {{ .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 минут и обновляет каталог.

Пример добавления собственного процесса — в разделе «Собственный процесс заказа ресурса».