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

49 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`, имя — редактируемое поле