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
+9 -1
View File
@@ -6,6 +6,8 @@ import (
"strings"
"github.com/hashicorp/terraform-plugin-framework/types"
"terraform-provider-nubes/internal/core/jsonutil"
)
func FormatBool(v types.Bool) string {
@@ -81,6 +83,12 @@ func CompactParams(params map[string]string) map[string]string {
// BuildJSON строит JSON-строку из map[string]string значений.
// Ключи не кавычатся если они уже в кавычках.
//
// FIX(uuid-case): после сборки приводим UUID-подстроки к lowercase. Облако хранит
// UUID в lowercase, но ресурсы могут отдавать id в UPPERCASE (например nsxtUid у
// кластера Штурвала), а платформа сравнивает регистр при create и падает с
// «Edge не развёрнут в указанном vDC». Без этой нормализации приходилось писать
// lower(...) в HCL у каждого такого поля.
func BuildJSON(parts map[string]string) string {
if len(parts) == 0 {
return "{}"
@@ -89,5 +97,5 @@ func BuildJSON(parts map[string]string) string {
for k, v := range parts {
pairs = append(pairs, fmt.Sprintf(`"%s":%s`, k, v))
}
return "{" + strings.Join(pairs, ",") + "}"
return jsonutil.LowercaseUUIDsInText("{" + strings.Join(pairs, ",") + "}")
}