fix(gen): Update без modify перечитывает read-back поля через RefreshResourceState (устраняет устаревший state_params/ложный дрейф)
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user