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 {