8.0 KiB
8.0 KiB
Резюме для нового чата (подробно)
Контекст
- Репозиторий: /home/naeel/terra
- Ветка: reset-universal-rebuild (создана и запушена)
- Цель: полный перезапуск генерации универсального провайдера. Сгенерировать YAML и Go-ресурсы заново, начиная с dummy.
Ключевые правила/инструкции
- Не менять существующий Go-код без разрешения (получали разрешения явно).
- Новая логика — только новые функции/файлы (если не дано разрешение на правки).
- Перед изменениями читать REPO_CONTENTS.md (сделано).
- Токены: при получении нового access_token сохранить в /home/naeel/terra/HH-MM-SS.token.
- Команды к API только read-only.
Что сделано до «reset»
- Исправления логики adopt/Read
- В internal/core/client.go добавлено поле
IsDeletedвInstanceStateResponseи функцияisInstanceDeleted(ignore deleted). При поиске по display_name удалённые инстансы пропускаются. - В генераторе Read добавлено удаление state при
isDeleted/explainedStatus=deleted.
- Поведение при дубликатах display_name
- В CreateResource (resources_gen/crud.go): если ресурс с именем найден и
resume_if_exists=false— ошибка без попытки create. - В ModifyPlan: предупреждение о дубликате для
resume_if_exists=true. Ошибка приresume_if_exists=false.
- Сброс warning для уже managed ресурсов
- В ModifyPlan добавлена проверка state.ID: если ресурс уже в state — warning не показывать.
- Было выявлено
- Проблема с
resourceRealm: ранее подставлялся автоматическиserviceName, что ломало Postgres (нужен доступный realm).
- Ветка и коммит
- Создана ветка:
reset-universal-rebuild. - Коммит: “reset generated resources”.
- Запушено в origin.
Большой reset (начать заново)
Удаление и пересоздание папок
- По запросу пользователя удалены:
- /home/naeel/terra/universal_rebuild/resources_yaml
- /home/naeel/terra/universal_rebuild/internal/resources_gen
- Затем каталоги созданы заново (пустые):
- /home/naeel/terra/universal_rebuild/resources_yaml
- /home/naeel/terra/universal_rebuild/internal/resources_gen
Новый генератор YAML (без instanceUid)
Причина
- Из документации
/docs/40_analysis/har/discovery/service_parameters_fetch.mdвыяснилось, что параметры можно получать без instanceUid:- GET
/api/v1/index.cfm?endpoint=/services/{svcId}→ список операций - GET
/api/v1/index.cfm?endpoint=/serviceOperation/{svcOperationId}→ cfsParams - опционально
/param-value-list/{svcOperationCfsParamId}
- GET
Реализация
- Создан новый генератор:
- Файл: /home/naeel/terra/universal_rebuild/tools/service_params_gen/main.go
- Он:
- Берёт токен из
NUBES_API_TOKENили изtest_universal/terraform.tfvars. - Вызывает
/index.cfm?endpoint=/services/{svcId}и/serviceOperation/{id}. - Строит YAML (create/modify params) и сохраняет в
universal_rebuild/resources_yaml/{name}.yaml.
- Берёт токен из
- Типы приводятся: bool → bool, int* → int64, остальное → string.
Токен
- Получен новый JSON с access_token.
- Сохранён файл:
/home/naeel/terra/20-19-21.token. - Обновлён
/home/naeel/terra/universal_rebuild/test_universal/terraform.tfvarsна новый token.
Старт заново: dummy (service_id=1)
- YAML:
- Сгенерирован через новый генератор:
- Команда:
NUBES_SERVICE_ID=1 NUBES_SERVICE_NAME=dummy go run ./tools/service_params_gen/main.go - Файл: /home/naeel/terra/universal_rebuild/resources_yaml/dummy.yaml
- Команда:
- Сгенерирован через новый генератор:
- Go-ресурсы:
- Сгенерированы стандартным генератором:
go run ./tools/gen/main.go
- Вновь добавлен
internal/resources_gen/crud.go(Create/Update/Delete helpers), т.к. он был удалён при reset.
- Сгенерированы стандартным генератором:
- Build:
go build -o terraform-provider-nubes— успешно.
Текущее состояние файлов (после reset)
- Сгенерировано:
- /home/naeel/terra/universal_rebuild/resources_yaml/dummy.yaml
- /home/naeel/terra/universal_rebuild/internal/resources_gen/* (dummy + базовые registry/helpers от генератора)
- /home/naeel/terra/universal_rebuild/internal/resources_gen/crud.go (вручную восстановлен)
- Новый инструмент:
- /home/naeel/terra/universal_rebuild/tools/service_params_gen/main.go
Что предстоит (следующие шаги)
- Сгенерировать YAML для других сервисов тем же новым генератором:
- Пример:
NUBES_SERVICE_ID=13 NUBES_SERVICE_NAME=bucket go run ./tools/service_params_gen/main.goNUBES_SERVICE_ID=90 NUBES_SERVICE_NAME=postgres go run ./tools/service_params_gen/main.go
- Проверить, что в YAML есть
resourceRealm(как параметр, без автоподстановки).
- Пример:
- Запустить
tools/gen/main.goпосле каждого набора YAML. - Проверить схему параметров (если имена типа
resource_c_p_u/allow_no_s_s_lполучаются странными — это ожидаемое поведение текущего генератора по CamelCase; при необходимости фиксить генератор). - Тесты:
- Create/modify/suspend/delete по выбранным сервисам (как ранее делали для dummy/bucket/postgres).
- resourceRealm:
- Сейчас параметр должен задаваться пользователем в
.tf. - Ранее была автоподстановка
serviceName, её отключили (см. правки tools/gen/main.go), но после reset может потребоваться проверить текущее поведение генератора.
- Сейчас параметр должен задаваться пользователем в
Важные файлы/ссылки
- Док: /home/naeel/terra/docs/40_analysis/har/discovery/service_parameters_fetch.md
- Новый генератор YAML: /home/naeel/terra/universal_rebuild/tools/service_params_gen/main.go
- Генератор Go ресурсов: /home/naeel/terra/universal_rebuild/tools/gen/main.go
- Каталоги для генерации:
- /home/naeel/terra/universal_rebuild/resources_yaml
- /home/naeel/terra/universal_rebuild/internal/resources_gen
Комментарии по ошибкам, которые были ранее
- 401 Unauthorized: токен истёк → обновили.
- 500 Resource realm not available: нужен
resourceRealmдоступный контракту (задавать в.tf). - Warnings
RESOURCE WITH SAME NAME EXISTS: теперь показываются только для ресурсов без state ID (на create), чтобы не мешать managed ресурсам.
Если нужно, можно продолжить с генерации bucket и postgres через новый service_params_gen, затем перегенерировать Go ресурсы и собрать провайдер.