fix(generator): нормализация имён атрибутов (fail-safe для кодов с дефисами)
Инцидент: в 1_dummy (API dev) появились коды s3-inst / s3-ref-root. ToSnake не убирал дефисы -> в схему уходило tfsdk:"s3-inst" -> Terraform отвергает такие имена и НЕ загружает схему провайдера целиком (plan/apply падали). - helpers.go: ToSnake завершается sanitizeAttrName ([a-z0-9_] допустимы, остальное -> _). Код для API не меняется: json:"s3-inst" в генерате сохранён. - Проверено: в generated/dev/go нет tfsdk-имён с недопустимыми символами; go build OK; go test ./internal/... -short PASS. - DEV_STAND/FPipeGmail: провайдер 2.0.23 -> 2.0.1; после сброса lock/кэша terraform validate -> Success. - HISTORY: описан инцидент, причина (данные API изменились после утра), фикс и особенность: перезапись артефакта под тем же номером требует сброса lock (init -upgrade хеш не пересчитывает). dev 2.0.1 перезалит (sha256 linux d25a71a31dbc9ab16e494b3d1f68b38b2214bd530045c5a3003f515bc725e407).
This commit is contained in:
@@ -35,3 +35,40 @@ GPG → заливка 5 объектов в S3).
|
||||
- `VERSION` в `TOOLS/config/dev/profile.env`: `2.0.0` → `2.0.1`.
|
||||
- `test` и `prod` **не перезаливались** — правки ядра в них не включены (по указанию владельца).
|
||||
- Версия `2.0.0` в реестре осталась от предыдущей заливки (там правок нет).
|
||||
|
||||
---
|
||||
|
||||
## Инцидент при первой заливке: невалидные имена атрибутов (`s3-inst`, `s3-ref-root`)
|
||||
|
||||
**Симптом.** После первой заливки `2.0.1` провайдер не мог отдать схему:
|
||||
`Invalid Attribute/Block Name: "s3-inst" at schema path "map_fixed.s3-inst"`,
|
||||
`"s3-ref-root" at schema path "s3-ref-root"` → падали `terraform plan/apply/validate`.
|
||||
|
||||
**Причина.** В API dev-стенда в тестовом сервисе `1_dummy` появились параметры с кодами
|
||||
с дефисами (`s3-inst`, `s3-ref-root`). Проверено по бэкапам YAML: в наборах от 09:50, 10:15 и
|
||||
11:05 (из последнего собрана рабочая `2.0.0`) их **нет**, в наборе от 21:35 — 2 вхождения.
|
||||
То есть данные изменились на стороне платформы уже после утренней заливки.
|
||||
`ToSnake` не удалял дефисы → в схему уходило `tfsdk:"s3-inst"`, Terraform отвергает такие имена
|
||||
(допустимы только `[a-z0-9_]`) и **целиком** не загружает схему провайдера.
|
||||
|
||||
**Фикс.** `TOOLS/resource-generator/internal/helpers/helpers.go`: `ToSnake` завершается
|
||||
`sanitizeAttrName` — всё вне `[a-z0-9_]` заменяется на `_` (`s3-inst` → `s3_inst`).
|
||||
Код для API не меняется: `json:"s3-inst"` в генерате сохранён (это значение поля, а не имя
|
||||
атрибута). Проверено: в сгенерированном коде не осталось ни одного `tfsdk:"…"` с недопустимыми
|
||||
символами; сборка и `go test ./internal/... -short` — зелёные.
|
||||
|
||||
**Повторная заливка.** `03` прогнан заново (та же версия `2.0.1`), sha256 нового
|
||||
linux-артефакта: `d25a71a31dbc9ab16e494b3d1f68b38b2214bd530045c5a3003f515bc725e407`.
|
||||
|
||||
**Важно про локальный кэш.** После перезаписи артефакта **под тем же номером** Terraform
|
||||
продолжает использовать старый файл: `init -upgrade` хеш не пересчитывает (версия и constraint
|
||||
не изменились). Лечится удалением `.terraform.lock.hcl` + `.terraform` и повторным `init`.
|
||||
Для внешних потребителей, которые ставят `2.0.1` впервые, проблемы нет — lock получит новый хеш.
|
||||
|
||||
**Верификация.** `DEV_STAND/FPipeGmail`: провайдер `2.0.1` (после сброса lock) →
|
||||
`terraform validate` — **Success**.
|
||||
|
||||
**Не закрыто (предложение).** В пайплайне нет проверки схемы: `02`/сборка/заливка проходят при
|
||||
невалидных именах атрибутов, дефект обнаруживается только при обращении Terraform к провайдеру.
|
||||
Стоит добавить шаг валидации схемы в `03` (или fail-fast в генераторе по `[a-z0-9_]`).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user