Files
autotest/DOCS/sol-scenario-editor.md
T

3.5 KiB
Raw Blame History

Sol — ответы по редактору сценариев

Дата: 2026-07-30

1. Структура steps

  • JSONB массив, отдельная таблица не нужна
  • Обязательно поле resource — идентификатор инстанса внутри сценария (для связи create→modify→delete)
  • scenario_definitions: + version INTEGER, updated_by, is_active/deleted_at, уникальность имени case-insensitive
  • scenario_runs: + definition_id, definition_version, steps_snapshot
  • Runner работает со snapshot, не перечитывает определение

2. Параметры в редакторе

  • Из Nubes API: сервис→операции→/instanceOperations/default/{opId}→коды
  • Выпадающий список с типом, обязательностью, default
  • Map/array — JSON-строка с валидацией
  • Кеш: браузерный на время сессии редактора ИЛИ серверный (stand+opId, TTL 5 мин)
  • Свободный ввод кода не нужен

3. Seed из config.yaml

  • Не импортировать при каждом пустом старте
  • Схема: marker импорта → INSERT ON CONFLICT DO NOTHING → marker scenario_seed_v1=completed
  • YAML вынести в scenario_seed.yaml, после rollout удалить
  • Остальной config.yaml не трогать

4. UI редактор

  • Модальное окно или боковая панель (не inline)
  • Имя, список шагов, сервис, операция, параметры
  • Кнопки добавить/удалить/вверх/вниз
  • Drag-and-drop не нужен
  • Мягкое удаление: is_active=false

5. Валидация

  • При сохранении: структура, существование сервиса, доступность операции, коды параметров, типы, уникальность resource, порядок (create→modify→delete, после delete ничего)
  • При запуске: повторить по актуальному API
  • Невалидный сценарий не запускать частично

6. Критически упущенное

  1. POST /api/scenario/run не возвращает run ID — гонка при двух запусках. Создавать запись ДО thread, вернуть HTTP 202 + run_id
  2. Нужен GET /api/scenario/runs/<id> — поллинг конкретного запуска
  3. save_run() не пишет scenario_run_id и step_number — шаги не связаны со сценарием
  4. TIMEOUT: op_data может быть неинициализирована
  5. Шаг нужно создавать в runs со статусом RUNNING ДО обращения к API, потом обновлять
  6. Блокировка параллельных запусков: HTTP 409 для одного client_id+stand
  7. CRUD: проверять client_id+stand при всех операциях
  8. version в definitions: PUT с текущей version, 409 при конфликте
  9. Runner использует персональный токен — нужен сервисный токен/клиент по stand
  10. Имя не идентификатор: API запуска принимает definition_id, имя — редактируемое поле