diff --git a/images/virtualization-artifact/pkg/controller/vmip/internal/attached_handler.go b/images/virtualization-artifact/pkg/controller/vmip/internal/attached_handler.go index 0bd413ddb1..4d67d7d9f6 100644 --- a/images/virtualization-artifact/pkg/controller/vmip/internal/attached_handler.go +++ b/images/virtualization-artifact/pkg/controller/vmip/internal/attached_handler.go @@ -125,6 +125,10 @@ func (h *AttachedHandler) getAttachedVirtualMachine(ctx context.Context, vmip *v } if attachedVM != nil { + // A VM that is being deleted is not considered attached so the VMIP can be released and, if managed, removed (e.g. during cascade deletion). + if !attachedVM.GetDeletionTimestamp().IsZero() && len(attachedVM.Status.VirtualMachinePods) == 0 { + return nil, nil + } if network.HasMainNetworkStatus(attachedVM.Status.Networks) { return attachedVM, nil } diff --git a/images/virtualization-artifact/pkg/controller/vmip/internal/watcher/vm_watcher.go b/images/virtualization-artifact/pkg/controller/vmip/internal/watcher/vm_watcher.go index 49f9fb1231..ce3d7e9bf4 100644 --- a/images/virtualization-artifact/pkg/controller/vmip/internal/watcher/vm_watcher.go +++ b/images/virtualization-artifact/pkg/controller/vmip/internal/watcher/vm_watcher.go @@ -71,6 +71,10 @@ func (w VirtualMachineWatcher) Watch(mgr manager.Manager, ctr controller.Control return true } + if len(oldVM.Status.VirtualMachinePods) != len(newVM.Status.VirtualMachinePods) { + return true + } + return false }, },