77 lines
5.8 KiB
Markdown
77 lines
5.8 KiB
Markdown
# 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 <TOKEN>" /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 параметры
|