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