Files
tf_provider/docs/CHAT_RESUME_NEW.md
T

8.1 KiB
Raw Blame History

Резюме для нового чата (подробно)

Контекст

  • Репозиторий: /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.
  1. Поведение при дубликатах display_name
  • В CreateResource (resources_gen/crud.go): если ресурс с именем найден и resume_if_exists=false — ошибка без попытки create.
  • В ModifyPlan: предупреждение о дубликате для resume_if_exists=true. Ошибка при resume_if_exists=false.
  1. Сброс warning для уже managed ресурсов
  • В ModifyPlan добавлена проверка state.ID: если ресурс уже в state — warning не показывать.
  1. Было выявлено
  • Проблема с resourceRealm: ранее подставлялся автоматически serviceName, что ломало Postgres (нужен доступный realm).
  1. Ветка и коммит
  • Создана ветка: 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 ресурсы и собрать провайдер.