v1.2.0: unified executor + flexible instance refs + params-render.js

Phase 1 — New modules:
- api/utils.py: find_uid(), uid_from_location() (replaces 2 duplicates)
- operations/poll.py: poll_until_done() (shared sync/async polling)
- operations/executor.py: execute_operation() (single CREATE/non-CREATE flow)

Phase 2 — Format + validation:
- routes/api_scenario_defs.py: _validate_steps with output/instance_ref/instance_uid
- operations/scenario.py: resolve instance_uid > instance_ref > service_id,
  use executor + poll_until_done, persist instance_bindings

Phase 3 — Migration:
- routes/api_test.py: create/non-create through executor, _finish_op through poll_until_done
- db/init_db.py: startup cleanup of stuck scenario_runs (>1h)

Phase 4 — UI shared module:
- static/js/params-render.js: renderParamRow, renderMapFixedRow, collectParams
- static/js/operations.js: use params-render.js (remove duplicates)
- templates/index.html: include params-render.js
- app.py: bump 1.1.57 → 1.2.0
This commit is contained in:
2026-07-31 08:54:57 +04:00
parent bcacb1fb33
commit 28dee4632a
+38
View File
@@ -0,0 +1,38 @@
# Архитектура app-autotest — план рефакторинга (2026-07-31)
> Полный план: `DOCS/opus-plan-2026-07-31.md`
> Ветка: `opus-architecture-2026-07-31`
## Проблемы
1. **Дублирование CREATE-флоу:** `routes/api_test.py` и `operations/scenario.py` содержат идентичную логику POST /instances → POST /instanceOperations → send_params_terraform → /run.
2. **Ограничение instance_map:** сценарий привязан к `service_id`, нельзя два инстанса одного сервиса.
3. **Нет общей функции** — правки Terraform-флоу надо делать в двух местах.
## Решение
### Новые файлы
- `operations/executor.py``execute_operation()` (единый флоу до /run)
- `operations/poll.py``poll_until_done()` (общий цикл поллинга)
- `api/utils.py``find_uid()`, `uid_from_location()` (вместо дублей)
- `static/js/params-render.js` — общий рендер параметров
### Новый формат шагов
```json
{"service_id": 1, "operation": "create", "params": {}, "output": "d1"}
{"service_id": 1, "operation": "modify", "params": {}, "instance_ref": "d1"}
{"service_id": 1, "operation": "delete", "params": {}, "instance_uid": "UUID"}
```
### Исправляемые файлы
- `routes/api_test.py` — через executor (+ CMDB delete отдельно)
- `operations/scenario.py` — через executor + poll_until_done + output/ref резолвинг
- `routes/api_scenario_defs.py` — _validate_steps с новыми ключами
- `db/init_db.py` — startup cleanup зависших scenario_runs
- `static/js/scenario-form.js` — модальный редактор с параметрами
- `static/js/operations.js` — использовать params-render.js
- `templates/index.html` — модал + params-render.js
- `app.py` — bump VERSION
### Порядок
Фаза 1 (общие модули) → Фаза 2 (формат шагов) → Фаза 3 (миграция вызывающих) → Фаза 4 (UI)