docs: Sonnet question — populate valueList from state.out

This commit is contained in:
2026-07-30 08:37:55 +04:00
parent a0a17e183f
commit 59776bed9d
+85
View File
@@ -0,0 +1,85 @@
# Sonnet 4.6 — valueList из state.out для внутренних операций инстанса
Дата: 2026-07-30
Версия: v1.1.38
## Проблема
PostgreSQL создан. `create_user` отработал успешно (HTTP 201). Но при вызове `delete_user` — поле `username` показывает пустой выпадающий список (`valueList=[]`). Созданный юзер `uuu8` не виден.
## Что нашли
**GET /instances/{uid}** возвращает `state.out` с актуальными данными:
```json
"state": {
"out": {
"users": {"uuu8": {"username": "uuu8", "role": "ddl_user", "rights": ["createdb", "createrole"]}},
"databases": {},
"backups": [],
...
}
}
```
**Шаблон** (`/instanceOperations/default/244` — delete_user) возвращает `valueList=[]`.
**Текущий код** — файл `/home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py`
```python
def get_params_with_current_values(client, op_id, instance_uid):
inst_data = client.get(f"/instances/{instance_uid}")
state_params = inst_data.get("instance", {}).get("state", {}).get("params", {}) or {}
tmpl_data = client.get(f"/instanceOperations/default/{op_id}")
tmpl_params = tmpl_data.get("svcOperation", {}).get("cfsParams", []) or []
for p in tmpl_params:
...
result.append({
...
"valueList": value_list, # ← из шаблона, всегда []
})
```
Читает `state.params` (конфигурация кластера), но НЕ читает `state.out` (пользователи, базы).
## Предлагаемое решение
После получения `inst_data`, извлечь `state.out`:
```python
state_out = inst_data.get("instance", {}).get("state", {}).get("out", {}) or {}
```
В цикле слияния, если `valueList` пустой — попробовать заполнить из `state.out`:
```python
value_list = p.get("valueList")
# Заполнить пустые valueList из state.out
if value_list is not None and not value_list:
code = p.get("svcOperationCfsParam", "").lower()
if "user" in code and isinstance(state_out.get("users"), dict):
value_list = sorted(state_out["users"].keys())
elif ("db" in code or "owner" in code) and isinstance(state_out.get("databases"), dict):
value_list = sorted(state_out["databases"].keys())
```
## Вопросы
1. **Правильный ли подход?** Смотреть в `state.out.users` / `state.out.databases` для заполнения пустых valueList? Или есть другой источник?
2. **Какие ещё поля из state.out могут понадобиться?** Для других сервисов (MongoDB, Redis, Kafka) — есть ли там аналогичные подресурсы?
3. **Универсальность:** Достаточно ли проверки по имени параметра (`"user" in code`, `"db" in code`)? Или нужен более общий механизм (например, проверять все ключи state.out и матчить по имени)?
4. **Кеширование:** `get_params_with_current_values` вызывается при каждом открытии формы. GET /instances/{uid} — дорогой запрос. Стоит ли кешировать state.out?
5. **Есть ли другие баги** в этой же области, которые мы упустили?
## Файлы для анализа
- `/home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py` — основной файл
- `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py` — api_params (строка 120-155)
- `/home/naeel/nubes/autotest/app-autotest/site/static/app.js` — showParams (строка 145-260)
- Пример API-ответа: `curl -H "Authorization: Bearer $TOKEN" /instances/0a42bef3-7ce1-42b7-aa80-4274c4d9568f`