diff --git a/TOOLS/config/dev/profile.env b/TOOLS/config/dev/profile.env index 73c44d0..b79a1f8 100644 --- a/TOOLS/config/dev/profile.env +++ b/TOOLS/config/dev/profile.env @@ -4,7 +4,7 @@ TOKEN_FILE="secrets/dev.token" # Release versions # Version -VERSION="2.0.15" +VERSION="2.0.16" NAMESPACE="nubes-dev" PROVIDER_NAME="nubes" diff --git a/TOOLS/resource-generator/internal/templates/instance.go b/TOOLS/resource-generator/internal/templates/instance.go index 59a28e1..62b929c 100644 --- a/TOOLS/resource-generator/internal/templates/instance.go +++ b/TOOLS/resource-generator/internal/templates/instance.go @@ -432,11 +432,31 @@ func (r *{{ToCamel .Name}}Resource) Update(ctx context.Context, req resource.Upd {{- end }} if !hasServiceParamChanges{{if .HasRedeploy}} && !redeployRequested{{end}} { + // Сервисные параметры не изменились → modify НЕ вызываем. + // + // НО read-back поля (state_params*, state_out*, vault_*) обязаны быть + // перечитаны из инстанса. Раньше здесь слепо копировались значения из + // старого state, из-за чего tfstate хранил устаревшее значение: + // пример — state_params["needEnableAVI"]="false", когда на платформе уже + // true (модификатор включил ALB). Это давало ложный дрейф + // «Objects have changed outside of Terraform» на каждом plan. plan.ID = instanceID - {{- range .OutputParams }} - plan.{{ToCamel .Code}} = state.{{ToCamel .Code}} - {{- end }} - resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) + refreshed, refreshDiags := resources_core.RefreshResourceState(ctx, r.client, instanceID.ValueString(), {{.ServiceID}}, plan, []resources_core.StateField{ + {{- range .OutputParams }} + {Code: "{{.Code}}"}, + {{- end }} + }, []resources_core.InputField{ + {{- range .SchemaParams }} + {{- if eq .RefSvcId 0 }} + {Code: "{{.Code}}", Field: "{{ToCamel .Code}}", Type: "{{.Type}}"}, + {{- end }} + {{- end }} + }) + resp.Diagnostics.Append(refreshDiags...) + if resp.Diagnostics.HasError() { + return + } + resp.Diagnostics.Append(resp.State.Set(ctx, &refreshed)...) return }