2.8 KiB
2.8 KiB
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.go — FindSubresourceInStateOut:
- При
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?
Формат ответа
На каждый вопрос: ДА/НЕТ + код (файл:строка) + конкретное исправление. Не читай другие файлы.