# Sonnet 4.6 — СВЕРКА С ТЕРРАФОРМОМ: почему autotest не работает а Terraform работает ## СУТЬ ПРОБЛЕМЫ Terraform-провайдер создаёт PostgreSQL БЕЗ ошибок. Autotest (наш код) — падает с «Не передан параметр: serviceInstanceUid». Мы скопировали «похожую» логику, но где-то расхождение. Нужно найти ВСЕ расхождения, пошагово. ## ЭТАЛОН — Terraform CREATE flow Файл: /home/naeel/nubes/autotest/DOCS/terraform-operations-full-logic.md (читай ВЕСЬ, особенно строки 30-90) ``` Шаг 1: POST /instances {serviceId, displayName, descr} Шаг 2: POST /instanceOperations {instanceUid, operation:"create"} Шаг 3: GET /instanceOperations/{opUid}?fields=cfsParams ← получить ВСЕ params с defaults Шаг 4: resolveRefSvcParamValues ← резолв refSvcId параметров Шаг 5: POST /instanceOperationCfsParams ← пользовательские params (×N) Шаг 6: POST /instanceOperationCfsParams ← required params с defaultValue, НЕ переданные в шаге 5 (×M) Шаг 7: GET /instanceOperations/{opUid}/validate-cfs Шаг 8: POST /instanceOperations/{opUid}/run {} Шаг 9: поллинг dtFinish ``` ## НАШ КОД — CREATE flow Файл: /home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py, функция api_test(), строки 170-245 Прочитай ВЕСЬ файл, особенно: - Строки 170-195 — создание instance + operation - Строки 207-245 — отправка params + досылка required+default + validate + run ## HAR-файл — реальные API-вызовы Terraform Файл: /home/naeel/nubes/autotest/development/dummycreate.har Это HAR с реальными запросами Terraform при создании Болванки (сервис 1). Найди ВСЕ POST /instanceOperationCfsParams — посмотри КАКИЕ именно params отправляются, в КАКОМ порядке, с КАКИМИ svcOperationCfsParamId. ## PostgreSQL YAML — структура параметров Файл: /home/naeel/nubes/autotest/STANDS/dev/resources_yaml/90_postgres.yaml Читай строки с operations.create.params — там 8 map-fixed параметров с sub_params. Также проверь через API что реально возвращается: ``` curl -H "Authorization: Bearer " /instanceOperations/default/19 ``` (create opId для PostgreSQL = 19) ## ЧТО НУЖНО НАЙТИ 1. **ШАГ 3 Terraform vs наш код**: Terraform делает GET /instanceOperations/{opUid}?fields=cfsParams ПОСЛЕ создания операции чтобы получить параметры С РЕЗОЛВОМ refSvcId. Мы берём из /instanceOperations/default/{svc_op_id} (шаблон). В чём разница? Может ли шаблон не содержать нужных значений которые появляются только в реальной операции? 2. **ШАГ 4 Terraform vs наш код**: resolveRefSvcParamValues — что это делает? Как Terraform резолвит refSvcId (например backupConfiguration.s3Uid ссылается на serviceId=12)? Есть ли у нас такой резолв? 3. **ШАГ 6 Terraform vs наш код**: Terraform досылает required+default. Мы тоже (v1.1.19). НО: Terraform берёт defaults из cfsParams РЕАЛЬНОЙ операции (шаг 3), а не из шаблона. Может ли быть расхождение? 4. **ПОРЯДОК отправки params**: В HAR, в каком порядке идут POST /instanceOperationCfsParams? Важен ли порядок? 5. **serviceInstanceUid**: Этого параметра НЕТ ни в YAML, ни в шаблоне API. Откуда он берётся? Может это внутренний параметр Nubes который появляется при резолве refSvcId? 6. **ПРОВЕРЬ ВЕСЬ НАШ КОД** на предмет любых других расхождений с Terraform flow. Не только CREATE — MODIFY, DELETE, SUSPEND, RESUME тоже. ## ИСХОДНИКИ TERRAFORM-ПРОВАЙДЕРА (читать только эти файлы!) Это Go-код Terraform-провайдера Nubes. В нём ЭТАЛОННАЯ логика которая РАБОТАЕТ. - /home/naeel/tf_provider/provider/internal/core/client.go — **главный**: HTTP-клиент, CreateGenericInstanceUniversalV6 (весь CREATE flow), RunInstanceOperationUniversal (MODIFY/DELETE/SUSPEND), doRequest (retry, заголовки) - /home/naeel/tf_provider/provider/internal/core/refsvc_resolve.go — **resolveRefSvcParamValues**: как резолвятся refSvcId (s3Uid → UUID S3-инстанса) - /home/naeel/tf_provider/provider/internal/core/instance_params.go — обработка параметров ## Файлы autotest (наш код — сравнивать с Terraform) - /home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py — ВЕСЬ: /api/test, /api/params, _finish_op - /home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py — get_params_with_current_values, _normalize_value_list - /home/naeel/nubes/autotest/DOCS/terraform-operations-full-logic.md — эталонный flow (уже скопирован из client.go) - /home/naeel/nubes/autotest/development/dummycreate.har — реальные запросы Terraform - /home/naeel/nubes/autotest/STANDS/dev/resources_yaml/90_postgres.yaml — PG параметры