Перейти к содержимому

Схема состояния

Справочник полей для .dwe/deploy/state.yml.

ПолеТипОписание
schema_versionstringВсегда "1"; зарезервировано для будущих изменений формата
projectobjectСостояние уровня проекта (deployed_at, config_hash, status и т. д.)
servicesmapСостояние по каждому сервису, индексируется именем папки сервиса (workspace/services/<name>/)
pendingobjectОжидающие операции, которые необходимо применить; присутствует только если dwe services enable/disable был запущен без --apply. Записывается атомарно командой переключения; очищается командами dwe restart, dwe deploy run или dwe reset run
ПолеТипОписание
deployed_atISO 8601 timestampКогда проект был последний раз полностью развёрнут
config_hashsha256 hexОтпечаток отслеживаемых сервисов + конфигурации деплоя верхнего уровня + конфигураций деплоя по каждому сервису. Правки включённых, но не отслеживаемых вариантов сервисов (например, main-debug) не меняют этот хеш.
statusenumdeployed, partial, failed, not_deployed, in_progress
last_runobjectВремя и результат последней попытки деплоя (status, started_at, finished_at)
phasesmapСостояние по каждой фазе для фаз уровня проекта (не сервисных)
ПолеТипОписание
statusenumdeployed, partial, failed, not_deployed (сервис никогда не запускался или все шаги были пропущены)
deployed_atISO 8601 timestampКогда этот сервис был последний раз полностью развёрнут
config_hashsha256 hexОтпечаток workspace/services/<name>/service.yml + workspace/services/<name>/deploy.yml
last_runobjectВремя и результат последней попытки деплоя для этого сервиса
phasesmapСостояние по каждой фазе этого сервиса
ПолеТипОписание
statusenumok, failed
stepsmapСостояние по каждому шагу, индексируется именем шага
ПолеТипОписание
statusenumok, failed, skipped
finished_atISO 8601 timestampКогда этот шаг завершился
action_hashsha256 hexОтпечаток полей шага type, cmd и параметров with:
duration_msintegerДлительность выполнения шага в миллисекундах

Когда dwe services enable или dwe services disable запускается без --apply, команда переключения сразу записывает изменение в local.yml, но откладывает шаг применения. Поле pending в файле состояния отслеживает, что ещё нужно выполнить.

Записи pending создаются только после того, как на этом стеке хотя бы раз была предпринята попытка деплоя. Любая предыдущая попытка засчитывается: в журнале есть хотя бы один сервис со статусом, отличным от not_deployed (deployed / failed / in_progress / partial / skipped), ИЛИ присутствует project.last_run, ИЛИ project.status отличается от not_deployed. Если файл журнала повреждён (ошибка загрузки), переключение всё равно пытается записать pending, чтобы повреждение всплыло — тихая потеря pending была бы хуже.

До первой попытки деплоя pending не имеет смысла — следующий dwe deploy подхватит новый local.yml с нуля — поэтому переключение тихо обновляет local.yml/.env, не пишет в журнал и печатает однострочную подсказку run dwe deploy после плана.

ПолеТипОписание
operationslistУпорядоченный список ожидающих операций
config_hashsha256 hexХеш конфигурации на момент переключения; используется для обнаружения устаревших pending-записей
created_atISO 8601 timestampКогда была записана pending-запись
ПолеТипОписание
kindstringrestart (всему стеку) или deploy (для конкретного сервиса)
serviceslistДля типа deploy: имена сервисов, которые нужно развернуть. Пусто для restart.
СобытиеЭффект для pending
dwe services enable/disable (без --apply), нет попытки деплоя в журналеБез изменений в pending; local.yml/.env обновляются и выводится подсказка dwe deploy
dwe services enable/disable (без --apply), есть любая попытка деплоя в журнале (в т.ч. failed/partial/project-only)Записывает pending.operations; добавляет/сливает операции для contributor-ов restart или deploy
Успешный dwe services enable/disable --applyОчищает только те pending-операции, которые выполнил данный шаг apply (несвязанные pending-операции из других сессий сохраняются)
Успешный dwe runОчищает операцию restart (запуск сам её удовлетворяет); deploy-операция сохраняется
Успешный dwe stopОчищает операцию restart (следующий dwe run подхватит переключённое состояние); deploy-операция сохраняется
Успешный dwe restartОчищает операцию restart; операция deploy (если есть) сохраняется
Успешный dwe deploy run (по всему проекту)Очищает операцию deploy; операция restart (если есть) сохраняется
Успешный dwe deploy run --service <name>Удаляет <name> из списка сервисов операции deploy; если список пуст, удаляет операцию
Успешный dwe reset run (по всему проекту)Очищает все pending-операции (полная очистка журнала)
Успешный dwe reset run --service <name>Атомарно записывает {kind: deploy, services: [<name>]} одновременно с удалением состояния развёртывания сервиса

dwe status (и его подкоманды apps, tools, infra, deploy) отображают предупреждающий баннер, когда pending не равно nil:

⚠ Pending: deploy required for: svc-a, svc-b
Run: dwe deploy run
⚠ Pending: restart required
Run: dwe restart

Баннер рендерится из pending.operations — по одной строке на операцию. Когда pending пуст, баннер не выводится.