func()

in internal/provider/application_vmware_vm_resource.go [187:267]


func (r *applicationVmwareVMsResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
	// Retrieve values from plan
	var plan applicationVmwareVMsResourceModel
	var listVMs []string
	diags := req.Plan.Get(ctx, &plan)
	resp.Diagnostics.Append(diags...)
	if resp.Diagnostics.HasError() {
		return
	}

	for _, vm := range plan.VMs {
		listVMs = append(listVMs, vm.ValueString())
	}

	reqVcenterHostAddVMs := backupdr.VmDiscoveryRest{
		Cluster: plan.ApplianceID.ValueString(),
		Addvms:  true,
		Vms:     listVMs,
	}

	// Generate API request body from plan
	reqBody := backupdr.HostApiVmAddNewOpts{
		Body: optional.NewInterface(reqVcenterHostAddVMs),
	}

	// Add new VMs of vCenter Host
	respObject, err := r.client.HostApi.VmAddNew(r.authCtx, plan.VcenterID.ValueString(), plan.ClusterName.ValueString(), &reqBody)
	if err != nil {
		resp.Diagnostics.AddError(
			"Error updating VMs of the vCenter Host",
			"Could not update VMs of vCenter Host, unexpected error: "+err.Error(),
		)
		return
	}

	if respObject.StatusCode == 200 || respObject.StatusCode == 204 {
		// Map response body to schema and populate Computed attribute values
		plan.Status = types.StringValue(respObject.Status)
		applicationIDs := make([]attr.Value, 0)
		applicationIDs = append(applicationIDs, plan.Applications.Elements()...)

		for _, application := range listVMs {
			filter := backupdr.ApplicationApiListApplicationsOpts{
				Filter: optional.NewString(fmt.Sprintf("uniquename:==%s", application)),
			}
			// fetch application ID with filter
			lsApps, res, err := r.client.ApplicationApi.ListApplications(r.authCtx, &filter)
			if err != nil {
				resp.Diagnostics.AddError(
					"Error listing applications",
					"Could not list applications, unexpected error: "+res.Status+" : "+err.Error(),
				)
				return
			}
			// capture the id of filtered application
			if lsApps.Items != nil && len(lsApps.Items) > 0 {
				applicationIDs = append(applicationIDs, types.StringValue(lsApps.Items[0].Id))
			}
		}
		if len(applicationIDs) > 0 {
			plan.Applications, diags = types.ListValue(types.StringType, applicationIDs)
			resp.Diagnostics.Append(diags...)
			if resp.Diagnostics.HasError() {
				return
			}
		}
	} else {
		plan.Status = types.StringValue(respObject.Status)
		resp.Diagnostics.AddError(
			"Error updating VMs of the vCenter Host",
			"Could not update VMs of vCenter Host, unexpected error: "+err.Error(),
		)
		return
	}

	diags = resp.State.Set(ctx, plan)
	resp.Diagnostics.Append(diags...)
	if resp.Diagnostics.HasError() {
		return
	}
}