4.0 KiB
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 с актуальными данными:
"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
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:
state_out = inst_data.get("instance", {}).get("state", {}).get("out", {}) or {}
В цикле слияния, если valueList пустой — попробовать заполнить из state.out:
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())
Вопросы
-
Правильный ли подход? Смотреть в
state.out.users/state.out.databasesдля заполнения пустых valueList? Или есть другой источник? -
Какие ещё поля из state.out могут понадобиться? Для других сервисов (MongoDB, Redis, Kafka) — есть ли там аналогичные подресурсы?
-
Универсальность: Достаточно ли проверки по имени параметра (
"user" in code,"db" in code)? Или нужен более общий механизм (например, проверять все ключи state.out и матчить по имени)? -
Кеширование:
get_params_with_current_valuesвызывается при каждом открытии формы. GET /instances/{uid} — дорогой запрос. Стоит ли кешировать state.out? -
Есть ли другие баги в этой же области, которые мы упустили?
Файлы для анализа
/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