Files
tf_provider/prompt_for_opus_duplicate.md
T

2.8 KiB
Raw Blame History

Prompt for Opus — subresource duplicate/exist + state_out

Файлы для анализа

Только эти:

  • /home/naeel/tf_provider/provider/internal/resources_core/subresource_guard.go — ВЕСЬ
  • /home/naeel/tf_provider/generated/test/go/90_postgres_database_resource.go — Create (строки 130-250)
  • /home/naeel/tf_provider/artifacts/output_inventory/running_suspended_output_fields_for_docs.json — PostgreSQL (svc 90), строки 190-575

Контекст

После повторного apply subresource pg_user_5 упал:

Операция вернула duplicate/exist, но объект не найден в state_out

Найденная причина

  • PostgreSQL state_out НЕ содержит databases и users (там только externalConnect, internalConnect, monitoring)
  • SubresourceListKey("database") → эвристика name+"s" → ищет ключ "databases" в state_out → known=false
  • Create-обработка duplicate требует known && found для adopt → known=false → всегда падает
  • Adopt subresource'а для PG физически невозможен через текущий механизм

Конкретные вопросы

Вопрос 1 (ПРИОРИТЕТ)

subresource_guard.goFindSubresourceInStateOut:

  • При known=false (ключа нет в state_out) — как должен вести себя duplicate/exist?
  • Сейчас: AddError "Нарушена консистентность"
  • Предлагаемое: доверять API-ошибке already exists, считать adopt успешным, вернуть существующий ID
  • Верно? Или нужен другой подход?

Вопрос 2

SubresourceListKey / SubresourceIdentityKey в subresource_guard.go:

  • Эвристики name+"s" и special-map на 2 сервиса
  • Нужен ли явный маппинг ключей из YAML/метаданных API вместо угадывания?
  • Где в API взять реальные имена ключей state_out для каждого сервиса?

Вопрос 3

Есть ли в API эндпоинты для прямого запроса списка subresource'ов (list_databases, list_users) — чтобы не полагаться на state_out?

Вопрос 4

IsSubresourceAlreadyExistsError:

  • Маркеры: уже существует, already exists, duplicate, conflict
  • Достаточно? Нужно ли добавить 409 (HTTP status), exist, already exist?

Формат ответа

На каждый вопрос: ДА/НЕТ + код (файл:строка) + конкретное исправление. Не читай другие файлы.