114 lines
8.0 KiB
Markdown
114 lines
8.0 KiB
Markdown
# Резюме для нового чата (подробно)
|
||
|
||
## Контекст
|
||
- Репозиторий: /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»
|
||
1) **Исправления логики adopt/Read**
|
||
- В internal/core/client.go добавлено поле `IsDeleted` в `InstanceStateResponse` и функция `isInstanceDeleted` (ignore deleted). При поиске по display_name удалённые инстансы пропускаются.
|
||
- В генераторе Read добавлено удаление state при `isDeleted`/`explainedStatus=deleted`.
|
||
|
||
2) **Поведение при дубликатах display_name**
|
||
- В CreateResource (resources_gen/crud.go): если ресурс с именем найден и `resume_if_exists=false` — ошибка без попытки create.
|
||
- В ModifyPlan: предупреждение о дубликате для `resume_if_exists=true`. Ошибка при `resume_if_exists=false`.
|
||
|
||
3) **Сброс warning для уже managed ресурсов**
|
||
- В ModifyPlan добавлена проверка state.ID: если ресурс уже в state — warning не показывать.
|
||
|
||
4) **Было выявлено**
|
||
- Проблема с `resourceRealm`: ранее подставлялся автоматически `serviceName`, что ломало Postgres (нужен доступный realm).
|
||
|
||
5) **Ветка и коммит**
|
||
- Создана ветка: `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}`
|
||
|
||
### Реализация
|
||
- Создан новый генератор:
|
||
- Файл: /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)
|
||
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
|
||
2) Go-ресурсы:
|
||
- Сгенерированы стандартным генератором:
|
||
- `go run ./tools/gen/main.go`
|
||
- Вновь добавлен `internal/resources_gen/crud.go` (Create/Update/Delete helpers), т.к. он был удалён при reset.
|
||
3) 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
|
||
|
||
## Что предстоит (следующие шаги)
|
||
1) **Сгенерировать YAML для других сервисов** тем же новым генератором:
|
||
- Пример:
|
||
- `NUBES_SERVICE_ID=13 NUBES_SERVICE_NAME=bucket go run ./tools/service_params_gen/main.go`
|
||
- `NUBES_SERVICE_ID=90 NUBES_SERVICE_NAME=postgres go run ./tools/service_params_gen/main.go`
|
||
- Проверить, что в YAML есть `resourceRealm` (как параметр, без автоподстановки).
|
||
2) **Запустить `tools/gen/main.go`** после каждого набора YAML.
|
||
3) **Проверить схему параметров** (если имена типа `resource_c_p_u`/`allow_no_s_s_l` получаются странными — это ожидаемое поведение текущего генератора по CamelCase; при необходимости фиксить генератор).
|
||
4) **Тесты**:
|
||
- Create/modify/suspend/delete по выбранным сервисам (как ранее делали для dummy/bucket/postgres).
|
||
5) **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 ресурсы и собрать провайдер. |