func()

in ec/ecresource/extensionresource/update.go [28:91]


func (r *Resource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) {
	if !resourceReady(r, &response.Diagnostics) {
		return
	}

	var oldState modelV0
	var newState modelV0

	diags := request.State.Get(ctx, &oldState)
	response.Diagnostics.Append(diags...)
	if response.Diagnostics.HasError() {
		return
	}

	diags = request.Plan.Get(ctx, &newState)
	response.Diagnostics.Append(diags...)
	if response.Diagnostics.HasError() {
		return
	}

	_, err := extensionapi.Update(
		extensionapi.UpdateParams{
			API:         r.client,
			ExtensionID: newState.ID.ValueString(),
			Name:        newState.Name.ValueString(),
			Version:     newState.Version.ValueString(),
			Type:        newState.ExtensionType.ValueString(),
			Description: newState.Description.ValueString(),
			DownloadURL: newState.DownloadURL.ValueString(),
		},
	)
	if err != nil {
		response.Diagnostics.AddError(err.Error(), err.Error())
		return
	}

	hasChanges := !oldState.FileHash.Equal(newState.FileHash) ||
		!oldState.LastModified.Equal(newState.LastModified) ||
		!oldState.Size.Equal(newState.Size)

	if !newState.FilePath.IsNull() && newState.FilePath.ValueString() != "" && hasChanges {
		response.Diagnostics.Append(r.uploadExtension(newState)...)
		if response.Diagnostics.HasError() {
			return
		}
	}

	found, diags := r.read(newState.ID.ValueString(), &newState)
	response.Diagnostics.Append(diags...)
	if response.Diagnostics.HasError() {
		return
	}
	if !found {
		response.Diagnostics.AddError(
			"Failed to read deployment extension after update.",
			"Failed to read deployment extension after update.",
		)
		response.State.RemoveResource(ctx)
		return
	}

	// Finally, set the state
	response.Diagnostics.Append(response.State.Set(ctx, newState)...)
}