From 95306336f7433504195b198e3c315267d58216b7 Mon Sep 17 00:00:00 2001 From: Daniil Antoshin Date: Tue, 24 Mar 2026 18:09:22 +0200 Subject: [PATCH 1/2] fix(vmop): prevent Maintenance mode from getting stuck during restore Return reconcile.Result instead of nil to properly complete the reconciliation loop when snapshot steps exit early (exit maintenance step, waiting disk ready step). Signed-off-by: Daniil Antoshin --- .../vmop/snapshot/internal/step/exit_maintenance_step.go | 2 ++ .../vmop/snapshot/internal/step/waiting_disk_ready_step.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go index 0ce2d8e8e7..12fb07b4b3 100644 --- a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go +++ b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go @@ -92,6 +92,8 @@ func (s ExitMaintenanceStep) Take(ctx context.Context, vmop *v1alpha2.VirtualMac ) return &reconcile.Result{}, err } + + return &reconcile.Result{}, nil } // If the maintenance condition was not present on the VM, diff --git a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/waiting_disk_ready_step.go b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/waiting_disk_ready_step.go index 7d9f6c5b9c..28994d0ec5 100644 --- a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/waiting_disk_ready_step.go +++ b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/waiting_disk_ready_step.go @@ -79,7 +79,7 @@ func (s WaitingDisksReadyStep) Take(ctx context.Context, vmop *v1alpha2.VirtualM if k8serrors.IsNotFound(err) { cb.Message("Waiting for resource readiness.") conditions.SetCondition(cb, &vmop.Status.Conditions) - return nil, nil + return &reconcile.Result{}, nil } return &reconcile.Result{}, fmt.Errorf("failed to get the `VirtualDisk`: %w", err) } From 969875ce0385fccfe35fa57cf2549faeb1194908 Mon Sep 17 00:00:00 2001 From: Daniil Antoshin Date: Tue, 24 Mar 2026 18:24:52 +0200 Subject: [PATCH 2/2] fix(vmop): set maintenance condition to false instead of early return Signed-off-by: Daniil Antoshin --- .../vmop/snapshot/internal/step/exit_maintenance_step.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go index 12fb07b4b3..510de7811e 100644 --- a/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go +++ b/images/virtualization-artifact/pkg/controller/vmop/snapshot/internal/step/exit_maintenance_step.go @@ -93,7 +93,7 @@ func (s ExitMaintenanceStep) Take(ctx context.Context, vmop *v1alpha2.VirtualMac return &reconcile.Result{}, err } - return &reconcile.Result{}, nil + maintenanceVMCondition.Status = metav1.ConditionFalse } // If the maintenance condition was not present on the VM,