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