diff --git a/images/virtualization-artifact/pkg/controller/service/attachment_service.go b/images/virtualization-artifact/pkg/controller/service/attachment_service.go index 39c3b08f20..e74b902a9a 100644 --- a/images/virtualization-artifact/pkg/controller/service/attachment_service.go +++ b/images/virtualization-artifact/pkg/controller/service/attachment_service.go @@ -196,6 +196,25 @@ func (s AttachmentService) UnplugDisk(ctx context.Context, kvvm *virtv1.VirtualM // T1: -->VMBDA A Should be Non-Conflicted lexicographically // T1: VMBDA B Phase: "" func (s AttachmentService) IsConflictedAttachment(ctx context.Context, vmbda *virtv2.VirtualMachineBlockDeviceAttachment) (bool, string, error) { + // CVI always has no conflicts. Skip + if vmbda.Spec.BlockDeviceRef.Kind == virtv2.ClusterVirtualImageKind { + return false, "", nil + } + // VI has conflicts only storage on PVC. Skip for ContainerRegistry + if vmbda.Spec.BlockDeviceRef.Kind == virtv2.VirtualImageKind { + vi, err := object.FetchObject(ctx, types.NamespacedName{ + Name: vmbda.Spec.BlockDeviceRef.Name, + Namespace: vmbda.Namespace}, + s.client, &virtv2.VirtualImage{}, + ) + if err != nil { + return false, "", err + } + if vi == nil || vi.Spec.Storage == virtv2.StorageContainerRegistry { + return false, "", nil + } + } + var vmbdas virtv2.VirtualMachineBlockDeviceAttachmentList err := s.client.List(ctx, &vmbdas, &client.ListOptions{Namespace: vmbda.Namespace}) if err != nil {