docs: 14 questions to Sol with full absolute paths
This commit is contained in:
+34
-20
@@ -1,59 +1,73 @@
|
||||
# Вопросы к Sol — обсуждение MVP
|
||||
|
||||
## Файлы для контекста (прочитай перед ответом)
|
||||
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py` — текущий 9-шаговый CREATE + non-CREATE
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/routes/api.py` — legacy эндпоинты (предлагаешь удалить)
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/runner.py` — legacy runner (предлагаешь удалить)
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/config.yaml` — предлагаешь удалить
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/db/init_db.py` — схема БД
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/db/save_run.py` — INSERT в runs
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/static/app.js` — фронтенд
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/api/http_client.py` — HTTP-клиент
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/api/auth.py` — токены
|
||||
- `/home/naeel/nubes/autotest/app-autotest/site/app.py` — точка входа, blueprint'ы
|
||||
- `/home/naeel/nubes/autotest/app-autotest/DOCS/gpt56-sol-plan.md` — твой план
|
||||
|
||||
## executor
|
||||
|
||||
**Q1: Зачем выносить executor из api_test.py прямо сейчас?**
|
||||
Сейчас 9-шаговая логика работает в api_test. Вынос — рефакторинг с риском. Почему не обернуть api_test в вызов из runner, а вынос сделать фазой 2?
|
||||
**Q1: Зачем выносить executor из `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py` прямо сейчас?**
|
||||
Сейчас 9-шаговая логика CREATE и non-CREATE живёт в api_test.py:173-250 (функция `api_test()` + `_send_params_terraform()` + `_normalize_value()` + `_resolve_ref_svc()`). Вынос в отдельный `operation_executor.py` — рефакторинг с риском сломать CREATE. Почему не обернуть вызов существующего `api_test` из runner, а вынос сделать фазой 2?
|
||||
|
||||
**Q2: executor внутри того же gunicorn-воркера или отдельный процесс?**
|
||||
Сценарий может идти 10-30 минут. Блокирует ли он воркера на всё это время?
|
||||
Сценарий PostgreSQL — 10-20 минут. Redis — 3 минуты. Блокирует ли executor gunicorn-воркера на всё это время? Или запускать в `threading.Thread` как сейчас делает `api_test`?
|
||||
|
||||
## YAML
|
||||
|
||||
**Q3: Параметры — code или numeric ID?**
|
||||
`code: cpu, value: "500"` читаемо но требует резолва через API. `svcOperationCfsParamId: 104, value: "500"` — работает сразу, но нечитаемо. Что предлагаешь?
|
||||
**Q3: Параметры — символьный code или numeric ID?**
|
||||
Предлагаешь code: `{code: cpu, value: "500"}`. Это читаемо, но требует резолва через `/instanceOperations/default/{opId}` → найти `svcOperationCfsParamId` для кода `cpu`. Числовой ID `{104: "500"}` работает сразу, но нечитаемо. Что предлагаешь для MVP?
|
||||
|
||||
**Q4: lifecycle persistent — как найти «тот самый» instance?**
|
||||
По `displayName == "autotest-postgres-permanent"`? А если кто-то переименовал? А если два сценария создали с одинаковым именем?
|
||||
По `displayName == "autotest-postgres-permanent"` через `GET /instances`? А если кто-то переименовал в UI облака? А если два сценария случайно создали инстансы с одинаковым именем?
|
||||
|
||||
**Q5: cleanup `always` — что чистить если create упал?**
|
||||
Если create вернул ошибку, instanceUid пустой. Что удалять?
|
||||
Если `POST /instances` вернул ошибку — `instanceUid` пустой. Вызывать `POST /instanceOperations {operation: "delete"}` не на чем. Что удалять?
|
||||
|
||||
## CMDB DELETE
|
||||
|
||||
**Q6: Почему удалить CMDB DELETE?**
|
||||
Nubes API не умеет удалять not-created инстансы. Без CMDB у пользователя нет способа удалить битые инстансы кроме ручного UI облака. Может оставить с логом, а не удалять?
|
||||
**Q6: Почему удалить CMDB DELETE из `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py`?**
|
||||
Сейчас строка 217-222: CMDB DELETE для not-created инстансов. Nubes API (`POST /instanceOperations {operation: "delete"}` + `/run`) возвращает 422 «Отсутствует state» для not-created. Без CMDB у пользователя нет способа удалить битые инстансы кроме ручного UI облака. Может оставить но с логом, а не удалять?
|
||||
|
||||
## БД
|
||||
|
||||
**Q7: Зачем три таблицы?**
|
||||
Предлагаешь `scenario_runs` + `scenario_steps` + доп колонки в `runs`. Почему не две (`scenario_runs` + `scenario_steps`) и не менять `runs`? Каждый шаг уже пишет в `runs` через `save_run`.
|
||||
**Q7: Зачем три таблицы (`scenario_runs` + `scenario_steps` + новые колонки в `runs`)?**
|
||||
Почему не две (`scenario_runs` + `scenario_steps`) и не менять существующую `runs`? Каждый шаг сценария уже вызывает `save_run()` из `/home/naeel/nubes/autotest/app-autotest/site/db/save_run.py`, который пишет в `runs`. Можно добавить `scenario_run_id` в `runs` без новой таблицы `scenario_steps`.
|
||||
|
||||
**Q8: heartbeat — через БД? UPDATE каждые N секунд?**
|
||||
Не убьёт ли это PostgreSQL при частых сценариях?
|
||||
Не убьёт ли это PostgreSQL при частых сценариях? Альтернатива — файловый lock как в `/home/naeel/nubes/autotest/app-autotest/site/operations/tracker.py` (fcntl.flock).
|
||||
|
||||
## UI
|
||||
|
||||
**Q9: Вкладки — зачем?**
|
||||
Сейчас всё на одном экране. Добавление вкладок раздувает UI. Почему не добавить секцию «Сценарии» под списком инстансов?
|
||||
Сейчас всё на одном экране (`/home/naeel/nubes/autotest/app-autotest/site/templates/index.html`). Добавление вкладок раздувает UI. Почему не добавить секцию «Сценарии» под списком инстансов, без переделки всего экрана?
|
||||
|
||||
**Q10: Запрет innerHTML для error/log — почему?**
|
||||
Сейчас весь вывод идёт через `_esc()`. Что конкретно не экранируется?
|
||||
Сейчас весь вывод идёт через `_esc()` (строка 263 app.js). Что конкретно не экранируется?
|
||||
|
||||
## Prod policy
|
||||
|
||||
**Q11: Почему такая сложная политика для MVP?**
|
||||
Проверка org UID, ClientID, allowlist delete, quarantine, purge_not_before — это не MVP. Почему не просто `if stand == "prod": return "заблокировано"` на первом этапе?
|
||||
Проверка org UID, ClientID, allowlist delete, quarantine, purge_not_before — это не MVP. Почему не просто `if stand == "prod": return {"error": "prod заблокирован для сценариев"}` на первом этапе? Всё остальное можно добавить когда сценарии заработают на dev/test.
|
||||
|
||||
## Legacy
|
||||
|
||||
**Q12: config.yaml — что в нём ценного?**
|
||||
Ты предлагаешь удалить. Но там могут быть настройки которые пригодятся. Что именно предлагаешь перенести в app.py?
|
||||
**Q12: `/home/naeel/nubes/autotest/app-autotest/site/config.yaml` — что в нём ценного?**
|
||||
Ты предлагаешь удалить. Но там могут быть настройки которые пригодятся. Что именно предлагаешь перенести в `app.py`?
|
||||
|
||||
## Общие вопросы
|
||||
|
||||
**Q13: Порядок шагов — почему именно такой?**
|
||||
Почему удаление legacy (шаг 1) до создания executor (шаг 2)? Если executor зависит от кода в api_test, удаление api.py/runner.py безопасно делать первым?
|
||||
**Q13: Порядок шагов — почему удаление legacy (шаг 1) до создания executor (шаг 2)?**
|
||||
Если executor будет вызывать код из `api_test.py`, удаление `api.py` и `runner.py` безопасно делать первым — они не используются. Но `config.yaml` используется в `runner.py:load_config()`. Если удалить config.yaml до того как executor готов — не сломает ли это что-то?
|
||||
|
||||
**Q14: Риски совместимости — ручной UI не сломается?**
|
||||
После всех изменений ручные операции в UI должны работать как раньше. Где самое узкое место?
|
||||
После всех изменений ручные операции в UI должны работать как раньше. Где самое узкое место? `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py:api_test()` — основной обработчик, если его менять — риск для всего.
|
||||
|
||||
Reference in New Issue
Block a user