From 46dc548af4b46b4a2a62731214e9fdef956dd97b Mon Sep 17 00:00:00 2001 From: Repinoid Date: Wed, 30 Sep 2026 10:32:22 +0300 Subject: [PATCH] =?UTF-8?q?docs(history):=20UUID-=D1=80=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=80=20=E2=80=94=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D1=80=D0=B0=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=BA=D0=B0=D1=80=D1=82=D0=B0=20=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D0=BA=20=D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перенесено из служебной памяти VS Code в файл репозитория: - пошаговая процедура релиза dev (VERSION → 03 → curl-проверка → VERSIONS.md → dev-materialize), включая, что доки в реестр не публиковались; - карта: нормализация нужна в двух местах (сравнение и отправка BuildJSON), перечень функций и правила (lower() — костыль; план целиком не нормализуем). --- ...09-30_uuid_case_normalization_on_create.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) 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(...)` на сборке