fix(provider): нормализация регистра UUID при отправке map-fixed JSON в API

- resources_core.BuildJSON оборачивает результат в jsonutil.LowercaseUUIDsInText:
  платформа сравнивает регистр UUID при create, а ресурсы отдают id в UPPERCASE
  (nsxtUid/vdcUid) -> без нормализации create Штурвала падал 'Edge не развёрнут
  в указанном vDC' (обнаружено на провайдере 2.0.23 из-под Windows).
- Одна точка покрывает все map-fixed-параметры (create/modify/redeploy),
  регенерация не требуется.
- Документация: HISTORY/2026-09-30, docs/60_strategy/terraform_case_sensitivity_fix.md §11,
  NOTES/30_analysis/ARCHITECTURE_NEW.md §6.5, docs/help/architecture-and-methods.md §7.

Не выпущено: версия не поднималась, релиз/регенерация не выполнялись.
This commit is contained in:
Repinoid
2026-09-30 08:34:04 +03:00
parent 09e38928d0
commit 9aed2dcdd9
5 changed files with 178 additions and 1 deletions
+21
View File
@@ -145,6 +145,27 @@ go build -o terraform-provider-nubes
- Генератор может создавать «разбитые» snake_case для CamelCase (например `resource_c_p_u`).
- Это ожидаемо, но если критично — нужен отдельный маппинг (по согласованию).
### 6.5 Регистр UUID в JSON-параметрах (map-fixed) — ОБЯЗАТЕЛЬНО ЗНАТЬ
- Платформа хранит UUID в lowercase, но **сравнивает регистр при create**. Ресурс
`nubes_vc_nsxt` отдаёт `id` в UPPERCASE → `startupConfiguration.vdcUid/nsxtUid`
в верхнем регистре → ошибка «Edge не развёрнут в указанном vDC».
- **Нормализация нужна в ДВУХ разных местах, и они не взаимозаменяемы:**
1. **Сравнение** (план vs state, adopt/suspend/resume, modifier-compare, диагностика) —
`jsonutil.LowercaseUUIDsInText` внутри `JSONStringsEquivalent`, `JsonNormalize()`,
`ParamsMatchForResume`, `normalizeCompareValue`.
2. **Отправка в API** — единственная точка: `resources_core.BuildJSON`
(`provider/internal/resources_core/helpers.go`), её вызывает генератор
(`NestedJSONExpr` в `templates/instance.go`: Create / Modify / Redeploy).
С 30.09 результат оборачивается в `LowercaseUUIDsInText(...)`.
- ⛔ **Не «лечить» это в HCL** (`lower(...)` в конфиге стенда) — это костыль, который
существовал только потому, что путь отправки не нормализовал UUID. Он ломался при
работе из-под Windows на провайдере `2.0.23`.
- Детали, аудит всех мест и границы применимости: `docs/60_strategy/terraform_case_sensitivity_fix.md`
(§10 — регистр при сравнении, §11 — регистр при отправке).
- Не покрыто: скалярные UUID в `normalizeUniversalValueV6` (дефолты create / досылка modify)
и валидация ref-параметров внутри JSON при adopt — см. §11 и HISTORY/2026-09-30.
---
## 7) Проверенная цепочка (dummy)