8.1 KiB
8.1 KiB
Резюме сессии: VDC create-flow, диалог с Opus и правка fallback (2026-09-21)
1. Контекст задачи
- Цель: довести до рабочего состояния создание
nubes_vc_vdcвFullPipe. - Симптом: при создании VDC провайдер падал на
GET /instanceOperations/{opUid}?fields=cfsParamsс HTTP 500. - В ходе разбора было подтверждено, что обычные сервисы через тот же провайдер работали, а VDC попадал в отдельную проблемную ветку backend-обработки.
2. Диагностика проблемы
2.1. Что ломалось
- В
provider/internal/core/client.gocreate-flow делалGET /instanceOperations/{opUid}?fields=cfsParamsсразу после создания операции. - Для VDC этот запрос приводил к ошибке backend’а:
Invalid call of the function [getResourceRealmConfig]Cannot cast Object type [Struct] to a value of type [string]- источник ошибки:
/app/api/v1/resources/instance_operation_cfs_param.cfc
- Причина по отчету: для
vc_vdcвычислялся динамическийdescrуstorageConfig.name, и backend падал наresourceRealm, который в DEV хранится какStruct, а неstring.
2.2. Почему обычные сервисы не ломались
- На обычных сервисах этот
GETлибо не попадал в проблемный backend-код, либо не требовал вычисленияresourceRealm. - Для VDC в YAML есть специфическая зависимость:
generated/dev/resources_yaml/21_vc_vdc.yamlstorageConfig.nameсодержит вычисляемыйdescrсgetResourceRealmConfig(...resourceRealm...).
- Для обычных сервисов, например
vappиpostgres, такого вычисляемогоresourceRealm-контекста нет.
2.3. Почему hasUnresolvedParams мешал
- Эвристика проверяла все строковые параметры, а не только параметры с
ref_svc_id. - Для VDC это ломало fallback на обычных литералах вроде:
providerVdc = fast-2.8networkProvider = default
- Эти значения не UUID и не JSON, но и резолвить их не нужно.
- В результате при падении GET провайдер вместо продолжения переходил в ошибку.
3. Диалог с Opus
3.1. Что просили у Opus
- Проверить только:
provider/internal/core/client.godocs/DEBUG_REPORT_VC_VDC_500.mdgenerated/dev/resources_yaml/21_vc_vdc.yamlgenerated/dev/resources_yaml/26_vapp.yamlgenerated/dev/resources_yaml/90_postgres.yaml
- Вопросы к Opus были узкими:
- почему обычные сервисы работали, а VDC начал падать на
GET ?fields=cfsParams - есть ли в VDC специфическая структура или зависимость, которой нет у обычных сервисов
- является ли
hasUnresolvedParamsневерной эвристикой именно в этом месте - что именно надо исправить
- почему обычные сервисы работали, а VDC начал падать на
3.2. Что ответил Opus по сути
- Root cause — не данные Terraform и не сами строки
fast-2.8/default, а backend-ошибка наGET /instanceOperations/{opUid}?fields=cfsParamsименно для VDC. - VDC отличается от обычных сервисов тем, что в его YAML есть динамический
descrдляstorageConfig.name, который тянетresourceRealm. hasUnresolvedParamsбыла признана лишней и хрупкой эвристикой: она может ломать fallback на обычных строках.- Итоговое решение Opus: при ошибке GET идти дальше по браузерному flow, без условий по всем строковым параметрам.
3.3. Дополнительные уточнения в диалоге
- Был отдельный спор по формулировке про Lucee / ColdFusion backend.
- В итоге было зафиксировано, что этот термин — не отдельная гипотеза, а просто обозначение backend-слоя, который уже фигурировал в отчетах и traceback’ах.
- Opus также подтвердил, что для VDC этот GET нужен только как вспомогательный шаг для
resolveRefSvcParamValues, а не как обязательный бизнес-этап.
4. Что изменили в коде
4.1. provider/internal/core/client.go
- В
CreateGenericInstanceUniversalV6удалён gate поhasUnresolvedParams. - Теперь логика такая:
- если
GET /instanceOperations/{opUid}?fields=cfsParamsуспешен — парсим и резолвимref_svc_id - если GET падает — просто продолжаем POST’ить параметры, а потом идём в
validate-cfsиrun
- если
- Функция
hasUnresolvedParamsудалена полностью. - После удаления была убрана осиротевшая документационная строка, оставшаяся над
isHexDigit.
4.2. provider/internal/core/client_test.go
- Добавлен тест:
TestCreateGenericInstanceUniversalV6_ContinuesWhenOpDetailsGETFails
- Тест моделирует:
POST /instancesPOST /instanceOperationsGET /instanceOperations/{opUid}?fields=cfsParams→ 500POST /instanceOperationCfsParamsGET /instanceOperations/{opUid}/validate-cfsPOST /instanceOperations/{opUid}/run- финальный
GET /instances/{uid}
- Проверка теста:
- create-flow завершился успешно
- все 7 параметров были отправлены с ожидаемыми значениями
- polling по операции был ровно один раз
5. Проверка после правки
cd /home/naeel/TF/tf_provider/provider && go test ./internal/core— успешно.- После ревью был пойман и исправлен только косметический хвост:
- старый комментарий над
isHexDigit, оставшийся после удаленияhasUnresolvedParams.
- старый комментарий над
- После этого пакет
internal/coreснова прошёл тесты.
6. Вывод по итогам сессии
- Проблема была не в обычных сервисах как таковых, а в специфике VDC-данных и backend-пути, который срабатывал на
GET ?fields=cfsParams. hasUnresolvedParamsбыла неверной эвристикой именно в create-flow VDC и ломала рабочий fallback.- Правильное поведение: если GET падает, не гадать по строковым параметрам, а продолжать browser-like flow через POST параметров, validate и run.
7. Что дальше
- Следующий этап — уже не правка логики, а публикация и стендовая проверка при необходимости.
- DEV-релиз
2.0.3успешно собран и загружен в registrynubes-devчерезTOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev. - Перед этим уже был подготовлен короткий запрос на ревью для Opus и получен ответ, который подтвердил направление правки.