From 91957dea9d3eae34c89a50966870ac3a67c3f594 Mon Sep 17 00:00:00 2001 From: Domen Dobnikar Date: Mon, 22 Sep 2025 14:39:25 +0200 Subject: [PATCH 1/2] Added empty API response "error" handling to virtual disk module --- internal/provider/hypercore_disk_resource.go | 7 ++++++- internal/utils/virtual_disk.go | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/provider/hypercore_disk_resource.go b/internal/provider/hypercore_disk_resource.go index e669856..5145b14 100644 --- a/internal/provider/hypercore_disk_resource.go +++ b/internal/provider/hypercore_disk_resource.go @@ -151,6 +151,7 @@ func (r *HypercoreDiskResource) Create(ctx context.Context, req resource.CreateR var diskUUID string var disk map[string]any + var err error isAttachingISO := data.IsoUUID.ValueString() != "" diagDiskType := utils.ValidateDiskType(data.Type.ValueString(), data.IsoUUID.ValueString()) @@ -202,12 +203,16 @@ func (r *HypercoreDiskResource) Create(ctx context.Context, req resource.CreateR }, } - diskUUID, disk = utils.AttachVirtualDisk( + diskUUID, disk, err = utils.AttachVirtualDisk( *r.client, attachPayload, sourceVirtualDiskID, ctx, ) + if err != nil { + resp.Diagnostics.AddError(err.Error(), fmt.Sprintf("Error: %s", err.Error())) + return + } tflog.Debug(ctx, fmt.Sprintf( "TTRT Attach: Attached with original size - vm_uuid=%s, disk_uuid=%s, original_size=%v (GB), source_virtual_disk_uuid=%s", data.VmUUID.ValueString(), diskUUID, float64(originalVDSizeBytes/1000/1000/1000), sourceVirtualDiskID), diff --git a/internal/utils/virtual_disk.go b/internal/utils/virtual_disk.go index 03b7857..cb5fbdd 100644 --- a/internal/utils/virtual_disk.go +++ b/internal/utils/virtual_disk.go @@ -108,7 +108,7 @@ func AttachVirtualDisk( payload map[string]any, sourceVirtualDiskUUID string, ctx context.Context, -) (string, map[string]any) { +) (string, map[string]any, error) { taskTag, _, _ := restClient.CreateRecord( fmt.Sprintf("/rest/v1/VirtualDisk/%s/attach", sourceVirtualDiskUUID), payload, @@ -116,7 +116,10 @@ func AttachVirtualDisk( ) taskTag.WaitTask(restClient, ctx) + if taskTag == nil { + return "", nil, fmt.Errorf("there was a problem attaching the virtual disk to the VM, check input parameters") + } diskUUID := taskTag.CreatedUUID disk := GetDiskByUUID(restClient, diskUUID) - return diskUUID, *disk + return diskUUID, *disk, nil } From a428f8cbb34af1548ec36d5e12b0339f6c406def Mon Sep 17 00:00:00 2001 From: Domen Dobnikar Date: Tue, 23 Sep 2025 13:19:26 +0200 Subject: [PATCH 2/2] Added more information to error log --- internal/provider/hypercore_disk_resource.go | 1 + internal/utils/virtual_disk.go | 11 +++++++---- internal/utils/vm.go | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/provider/hypercore_disk_resource.go b/internal/provider/hypercore_disk_resource.go index 5145b14..1289b13 100644 --- a/internal/provider/hypercore_disk_resource.go +++ b/internal/provider/hypercore_disk_resource.go @@ -207,6 +207,7 @@ func (r *HypercoreDiskResource) Create(ctx context.Context, req resource.CreateR *r.client, attachPayload, sourceVirtualDiskID, + data.VmUUID.ValueString(), ctx, ) if err != nil { diff --git a/internal/utils/virtual_disk.go b/internal/utils/virtual_disk.go index cb5fbdd..21d17f7 100644 --- a/internal/utils/virtual_disk.go +++ b/internal/utils/virtual_disk.go @@ -96,7 +96,10 @@ func UploadVirtualDisk( fmt.Sprintf("Please retry apply after Terraform finishes it's current operation or consider using the `-parallelism=1` terraform option. HC3 response message: %v", err.Error()), ) } - + if taskTag == nil { + return "", nil, diag.NewErrorDiagnostic("Failed to upload virtual disk "+name+" from source "+sourceURL, + "There was a problem uploading virtual disk "+name+" from source "+sourceURL+", check input parameters") + } taskTag.WaitTask(restClient, ctx) vdUUID := taskTag.CreatedUUID vd := GetVirtualDiskByUUID(restClient, vdUUID) @@ -107,6 +110,7 @@ func AttachVirtualDisk( restClient RestClient, payload map[string]any, sourceVirtualDiskUUID string, + sourceVMUUID string, ctx context.Context, ) (string, map[string]any, error) { taskTag, _, _ := restClient.CreateRecord( @@ -114,11 +118,10 @@ func AttachVirtualDisk( payload, -1, ) - - taskTag.WaitTask(restClient, ctx) if taskTag == nil { - return "", nil, fmt.Errorf("there was a problem attaching the virtual disk to the VM, check input parameters") + return "", nil, fmt.Errorf("there was a problem attaching the virtual disk %s to the VM %s, check input parameters", sourceVirtualDiskUUID, sourceVMUUID) } + taskTag.WaitTask(restClient, ctx) diskUUID := taskTag.CreatedUUID disk := GetDiskByUUID(restClient, diskUUID) return diskUUID, *disk, nil diff --git a/internal/utils/vm.go b/internal/utils/vm.go index 6715a87..349345a 100644 --- a/internal/utils/vm.go +++ b/internal/utils/vm.go @@ -245,7 +245,6 @@ func (vc *VM) SendImportRequest(restClient RestClient, source map[string]any) *T payload, -1, ) - //panic(fmt.Sprintf("neki neki: %d, %v", statusCode, err)) return taskTag } func (vc *VM) Import(restClient RestClient, source map[string]any, ctx context.Context) map[string]any {