func()

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)...)
}