6.2 KiB
2026-07-30 — Сессия (v1.1.51 → v1.1.55)
Контекст
Сценарий dummy_test падает на шаге CREATE: no instanceUid in response. Ручное создание Болванки через UI работает.
Найденные и исправленные баги
Баг #1 — no instanceUid in response (ЛОЖНАЯ ТРЕВОГА)
Где: scenario.py:122 — resp.get("instanceUid") возвращал None.
Причина: сценарий НЕ перезапускался после деплоя v1.1.52. UI показывал старый результат из БД от v1.1.51 (баг #3).
Проверка curl: API отвечает корректно — 201, Location: ./UUID, тело "". http_client.py правильно парсит.
Добавлено в v1.1.52: _status (HTTP-код) в результат http_client.post() для отладки.
Баг #2 — лишний svcOperationId для create (ИСПРАВЛЕН в v1.1.52)
Где: scenario.py:127
Для create операция /instanceOperations не должна содержать svcOperationId (по спецификации Terraform). Было одинаково для всех операций, стало:
if op_name == "create":
op_payload = {"instanceUid": instance_uid, "operation": op_name}
else:
op_payload = {"instanceUid": instance_uid, "svcOperationId": svc_op_id, "operation": op_name}
Баг #3 — старые результаты сценариев после редеплоя (ИСПРАВЛЕН в v1.1.53)
Где: api_scenario.py + app.js
Симптом: после редеплоя UI показывал результат сценария от СТАРОЙ версии (из БД), пользователь думал что новый код не работает.
Причина: /api/scenario/status не возвращал app_version, фронтенд не фильтровал по версии.
Исправление:
api_scenario.py: добавленapp_versionв SELECT обоих эндпоинтовapp.js:loadScenarios()фильтрует историю поwindow.APP.version— показывает только запуски текущей версии
Баг #4 — нельзя удалять без suspend (ОБНАРУЖЕН)
DELETE после CREATE падает: «Невозможно выполнить операцию удаления услуги. Услуга не остановлена». Нужно сначала suspend + 15 мин ожидания. Вывод: не использовать delete в сценариях.
Хронология
v1.1.52 — fix scenario create + http_client _status debug
scenario.py: убранsvcOperationIdиз create payloadhttp_client.py: добавлен{"_status": r.status_code}в результат для отладки
v1.1.53 — filter scenario history by app_version
api_scenario.py:app_versionв SELECTapp.js: фильтрverHistory = srHistory.filter(r => r.app_version === curVer)
v1.1.55 — split large files + CRUD scenario editor
Backend (5→7 файлов):
api_test.py: 622→479 строк, terraform-функции →operations/terraform.py(142)api_scenario.py→api_scenario_run.py(153) +api_scenario_defs.py(108)db/scenario_defs.py: +client_id,stand,is_seedвlist_definitionsapi_scenario_defs.py:_validate_steps()— валидация шагов перед create/updatescenario.py: импортsend_params_terraformизoperations/terraform.py(вместо кросс-импорта из routes)
Frontend (1→10 файлов):
app.js: 554→16 (загрузчик)utils.js(45),instances.js(89),operations.js(249)history.js(35),scenario-list.js(90)- CRUD:
scenario-form.js(128),scenario-create.js(25, +clone),scenario-edit.js(12),scenario-delete.js(13) - Кнопки [▶][✏][⎘][🗑], seed-сценарии только [▶][⎘]
- Inline-редактор: имя, шаги (service_id, operation, params), 409 conflict
Максимальный размер файла: JS 249 строк, Python 479 строк.
Agent consultations
Вопрос к Sonnet: план CRUD-редактирования сценариев
Суть: сейчас сценарии правятся только через scenario_seed.yaml → редеплой. Нужно редактирование через UI без редеплоя.
Ответ Sonnet (ключевые выводы):
-
CRUD-эндпоинты УЖЕ реализованы в
api_scenario.py(я ошибался, они есть):GET/POST /api/scenario/definitionsGET/PUT/DELETE /api/scenario/definitions/<id>- DB-функции в
scenario_defs.pyполностью готовы
-
Нужны только 3 мелкие правки бэкенда:
list_definitions: добавитьclient_id,stand,is_seedв SELECTapi_scenario.py:_validate_steps()с проверкой service_id, operation, paramsindex.html:window.APP.services(список сервисов для фронтенда)
-
Фронтенд — ~200 строк JS:
- Кнопки [▶][✏][⎘][🗑] у каждого сценария
- Inline-редактор: имя, шаги (сервис▾, операция▾, параметры)
- Автоподгрузка операций при смене сервиса (
GET /api/operations/{svcId}) - Автозаполнение параметров при смене операции (
GET /api/params/{svcOpId}) - Оптимистичная блокировка (version → 409)
-
Безопасность: изоляция по client_id+stand, seed-сценарии только [▶][⎘]
Отладка через kubectl
- SSH:
naeel@5.172.178.213(ключsecrets/id_ed25519.txt) - Неймспейс autotest:
01a2d5b2-4df4-4cfe-b98e-8dd3534a3bb5 - Код в поде:
/var/www/site/ - Проверка версии:
kubectl exec -n $NS deploy/pythonk8s -c app -- grep VERSION /var/www/site/app.py