fix(gen): Update без modify перечитывает read-back поля через RefreshResourceState (устраняет устаревший state_params/ложный дрейф)

This commit is contained in:
Repinoid
2026-09-23 07:04:02 +03:00
parent 60bf218532
commit 200bf457ce
2 changed files with 25 additions and 5 deletions
+1 -1
View File
@@ -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
}