From 0e26e9838410eb164de287de3f11fb354a401b21 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Wed, 30 Sep 2026 20:38:37 +0300 Subject: [PATCH] =?UTF-8?q?docs(uuid-case):=20=D0=B7=D0=B0=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=84?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=20=D1=81=D0=BE?= =?UTF-8?q?=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - core/refsvc.go: комментарий ссылался на несуществующий блок 'Restore user-provided casing' в instance.go. Факт: ref_svc исключены из read-back (InputField только при RefSvcId==0), UUID внутри JSON нормализуются при отправке (BuildJSON -> LowercaseUUIDsInText). - docs/60_strategy/terraform_case_sensitivity_fix.md: §4 помечен как историческая справка (подхода originalVappUid в коде нет); актуальные §10-§11. Проверено: go build ./... OK; go test ./internal/... -short -> PASS. --- docs/60_strategy/terraform_case_sensitivity_fix.md | 10 ++++++++++ provider/internal/core/refsvc.go | 8 ++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/60_strategy/terraform_case_sensitivity_fix.md b/docs/60_strategy/terraform_case_sensitivity_fix.md index 10e89d8..81161ad 100644 --- a/docs/60_strategy/terraform_case_sensitivity_fix.md +++ b/docs/60_strategy/terraform_case_sensitivity_fix.md @@ -90,6 +90,16 @@ schema.StringAttribute{ ## 4. Правильное решение +> ⚠️ **Историческая справка (пометка 2026-09-30).** Описанный ниже подход «Restore user-provided +> casing» (`originalVappUid` в шаблоне `instance.go`) в текущем коде **отсутствует**. +> Фактическая реализация регистра UUID: +> 1. ref_svc-атрибуты **исключены из read-back**: шаблон `instance.go` добавляет `InputField` только +> при `eq .RefSvcId 0`, поэтому в state остаётся регистр из config; +> 2. UUID-подстроки **внутри JSON** нормализуются при отправке +> (`resources_core.BuildJSON` → `jsonutil.LowercaseUUIDsInText`). +> +> Разделы §10–§11 ниже — актуальные. Раздел 4 оставлен как история разбора. + **Источник истины**: plan = config = "6214BA32-..." (регистр пользователя, неизменен) **Задача**: state после apply тоже должен быть "6214BA32-..." diff --git a/provider/internal/core/refsvc.go b/provider/internal/core/refsvc.go index 7718a16..4fabcfc 100644 --- a/provider/internal/core/refsvc.go +++ b/provider/internal/core/refsvc.go @@ -17,8 +17,12 @@ import ( // указанного сервиса. // // ВАЖНО (uuid-case, 2026-03): API облака возвращает UUID всегда в нижнем регистре. -// Для отправки в API нормализуем к lowercase, но в state сохраняем регистр -// пользователя (см. шаблон instance.go, блоки "Restore user-provided casing"). +// Для отправки в API нормализуем к lowercase. В state регистр пользователя сохраняется +// потому, что ref_svc-атрибуты ИСКЛЮЧЕНЫ из read-back (шаблон instance.go добавляет +// InputField только при `eq .RefSvcId 0`), а UUID-подстроки ВНУТРИ JSON нормализуются +// при отправке (`resources_core.BuildJSON` -> `jsonutil.LowercaseUUIDsInText`). +// (Блока "Restore user-provided casing" в instance.go нет — он описан только в доке +// docs/60_strategy/terraform_case_sensitivity_fix.md как исторический подход.) func (c *UniversalClient) resolveRefSvcParamValues(ctx context.Context, opParams []universalCfsParam, params map[int]string) (map[int]string, error) { if len(params) == 0 || len(opParams) == 0 {