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:
@@ -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, ",") + "}")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user