diff --git a/HISTORY/2026-09-30_uuid_case_normalization_on_create.md b/HISTORY/2026-09-30_uuid_case_normalization_on_create.md index 1b175f6..b0c8fdc 100644 --- a/HISTORY/2026-09-30_uuid_case_normalization_on_create.md +++ b/HISTORY/2026-09-30_uuid_case_normalization_on_create.md @@ -78,6 +78,47 @@ create / modify / redeploy (19 сгенерированных ресурсов, `DEV_STAND/FullPipe/shturval.tf1:123` передают `nubes_vc_vdc.vdc.id` / `nubes_vc_nsxt.edge.id` напрямую → на create у них тот же риск. +## Процедура релиза (dev) — воспроизводимо (проверено 30.09.2026) + +1. Поднять `VERSION` в `TOOLS/config/dev/profile.env` и закоммитить + (иначе доки генерируются со старой версией). +2. Собрать и залить: + ```bash + ./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 2.0.24 + ``` + Скрипт сам выполняет шаги `01` + `02`, собирает 3 платформы + (linux/windows/darwin amd64), подписывает GPG и заливает в S3. +3. Проверить публикацию: + ```bash + curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes-dev/nubes/versions + ``` +4. Обновить `VERSIONS.md` и закоммитить. +5. Для локального `go build`/`go test`: `02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev` + и `TOOLS/scripts/dev-materialize.sh dev` (эфемерная копия в `provider/`). + +⚠️ Доки в реестр (шаг `04_build_and_publish_docs.sh`) в этом релизе **не публиковались**. + +## Где нормализация нужна (карта, чтобы не потерять) + +Нормализация регистра UUID нужна в **двух независимых местах**: + +1. **Сравнение** (план ↔ state, adopt, suspend/resume, modifier-compare, диагностика): + `jsonutil.LowercaseUUIDsInText` → `JSONStringsEquivalent`, `JsonNormalize()`, + `ParamsMatchForResume`, `normalizeCompareValue`. +2. **Отправка в API** — единственная точка `resources_core.BuildJSON` + (`provider/internal/resources_core/helpers.go`), вызывается сгенерированным кодом + через `NestedJSONExpr` (`TOOLS/resource-generator/internal/templates/instance.go`: + Create ~302, Modify ~488, Redeploy ~505). + +Правила: + +- ⛔ `lower(...)` в HCL — костыль, а не решение (был нужен только из-за ненормализованной отправки). +- ⛔ Не нормализовать план целиком (скаляры→строки, сортировка ключей) — вечный diff; + менять только регистр UUID-подстрок. +- `resolveRefSvcParamValues` (`core/refsvc.go`) покрывает только top-level `refSvcId` + и `s3.*uid` внутри map-fixed; `vdcUid`/`nsxtUid` — нет. +- Спеки map-fixed без строковых секретов (только `*Uid`) → regex `uuidAnywhereRegex` безопасен. + ## Открытые вопросы (не закрыты) 1. Проверить на живом стенде: create кластера Штурвала **без** `lower(...)` на сборке