fix(generator): is_modifiable=true → параметр НЕ create-only (канон: меняется в UI → меняется в Terraform)
This commit is contained in:
@@ -290,6 +290,7 @@ func ConvertParams(params []types.ParamSpec) []types.Param {
|
|||||||
IsJson: strings.EqualFold(strings.TrimSpace(p.DataType), "json"),
|
IsJson: strings.EqualFold(strings.TrimSpace(p.DataType), "json"),
|
||||||
HasSubParams: isNested,
|
HasSubParams: isNested,
|
||||||
SubParams: subParams,
|
SubParams: subParams,
|
||||||
|
IsModifiable: p.IsModifiable,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ func AlignParamTypes(params []types.Param, schema []types.Param) []types.Param {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ComputeCreateOnly вычисляет набор полей, которые есть только в create (не в modify).
|
// ComputeCreateOnly вычисляет набор полей, которые есть только в create (не в modify).
|
||||||
|
// Канон: параметр изменяемый (is_modifiable == true) → НЕ create-only,
|
||||||
|
// потому что «можно менять в UI → можно менять в Terraform».
|
||||||
func ComputeCreateOnly(createParams []types.Param, modifyParams []types.Param) map[string]struct{} {
|
func ComputeCreateOnly(createParams []types.Param, modifyParams []types.Param) map[string]struct{} {
|
||||||
modifyCodes := make(map[string]struct{}, len(modifyParams))
|
modifyCodes := make(map[string]struct{}, len(modifyParams))
|
||||||
for _, p := range modifyParams {
|
for _, p := range modifyParams {
|
||||||
@@ -127,6 +129,10 @@ func ComputeCreateOnly(createParams []types.Param, modifyParams []types.Param) m
|
|||||||
if key == "" {
|
if key == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// is_modifiable:true → параметр можно менять → не create-only.
|
||||||
|
if p.IsModifiable != nil && *p.IsModifiable {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if _, ok := modifyCodes[key]; !ok {
|
if _, ok := modifyCodes[key]; !ok {
|
||||||
createOnly[key] = struct{}{}
|
createOnly[key] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ type Param struct {
|
|||||||
Sensitive bool
|
Sensitive bool
|
||||||
CreateOnly bool
|
CreateOnly bool
|
||||||
ForceNew bool
|
ForceNew bool
|
||||||
|
// IsModifiable — флаг is_modifiable из API (можно менять в UI → можно менять в Terraform).
|
||||||
|
// nil означает «не указано» (как правило, изменяемо).
|
||||||
|
IsModifiable *bool
|
||||||
// IsJson — атрибут является JSON-строкой (data_type: json в YAML-спеке).
|
// IsJson — атрибут является JSON-строкой (data_type: json в YAML-спеке).
|
||||||
// При IsJson=true в схему добавляется JsonNormalize план-модификатор,
|
// При IsJson=true в схему добавляется JsonNormalize план-модификатор,
|
||||||
// чтобы план и API-ответ (компактный JSON) всегда совпадали.
|
// чтобы план и API-ответ (компактный JSON) всегда совпадали.
|
||||||
|
|||||||
Reference in New Issue
Block a user