in ec/ecresource/deploymentresource/update.go [32:114]
func (r *Resource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
var plan v2.DeploymentTF
resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...)
if resp.Diagnostics.HasError() {
return
}
var state v2.DeploymentTF
resp.Diagnostics.Append(req.State.Get(ctx, &state)...)
if resp.Diagnostics.HasError() {
return
}
// Read migrate request from private state
migrateTemplateRequest, diags := ReadPrivateStateMigrateTemplateRequest(ctx, req.Private)
if diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}
updateReq, diags := plan.UpdateRequest(ctx, r.client, state, migrateTemplateRequest)
if diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}
res, err := deploymentapi.Update(deploymentapi.UpdateParams{
API: r.client,
DeploymentID: plan.Id.ValueString(),
Request: updateReq,
Overrides: deploymentapi.PayloadOverrides{
Version: plan.Version.ValueString(),
Region: plan.Region.ValueString(),
},
})
if err != nil {
resp.Diagnostics.AddError("failed updating deployment", err.Error())
return
}
if err := WaitForPlanCompletion(r.client, plan.Id.ValueString()); err != nil {
resp.Diagnostics.AddError("failed tracking update progress", err.Error())
return
}
privateFilters, d := readPrivateStateTrafficFilters(ctx, req.Private)
resp.Diagnostics.Append(d...)
if resp.Diagnostics.HasError() {
return
}
planRules, diags := HandleTrafficFilterChange(ctx, r.client, plan, privateFilters)
resp.Diagnostics.Append(diags...)
updatePrivateStateTrafficFilters(ctx, resp.Private, planRules)
resp.Diagnostics.Append(v2.HandleRemoteClusters(ctx, r.client, plan.Id.ValueString(), plan.Elasticsearch)...)
deployment, diags := r.read(ctx, plan.Id.ValueString(), &state, &plan, res.Resources, planRules, nil)
resp.Diagnostics.Append(diags...)
if deployment == nil {
resp.Diagnostics.AddError("cannot read just updated resource", "")
resp.State.RemoveResource(ctx)
return
}
if plan.ResetElasticsearchPassword.ValueBool() {
newUsername, newPassword, diags := r.ResetElasticsearchPassword(plan.Id.ValueString(), *deployment.Elasticsearch.RefId)
if resp.Diagnostics.Append(diags...); resp.Diagnostics.HasError() {
return
}
deployment.ElasticsearchUsername = newUsername
deployment.ElasticsearchPassword = newPassword
}
resp.Diagnostics.Append(resp.State.Set(ctx, deployment)...)
}