diff --git a/crds/virtualdisk.yaml b/crds/virtualdisk.yaml index 30de0fac5..3afde7051 100644 --- a/crds/virtualdisk.yaml +++ b/crds/virtualdisk.yaml @@ -304,7 +304,7 @@ spec: type: array description: | A list of `VirtualMachines` that use the disk - example: [{ name: "VM100" }, { name: "VM200" }] + example: [{ name: "VM100" }] items: type: object properties: diff --git a/images/virtualization-artifact/pkg/controller/service/disk_service.go b/images/virtualization-artifact/pkg/controller/service/disk_service.go index 813395952..6c4b2801f 100644 --- a/images/virtualization-artifact/pkg/controller/service/disk_service.go +++ b/images/virtualization-artifact/pkg/controller/service/disk_service.go @@ -102,10 +102,6 @@ func (s DiskService) CleanUp(ctx context.Context, sup *supplements.Generator) (b if err != nil { return false, err } - pv, err := s.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } var resourcesHaveDeleted bool @@ -123,20 +119,6 @@ func (s DiskService) CleanUp(ctx context.Context, sup *supplements.Generator) (b } } - if pv != nil { - resourcesHaveDeleted = true - - err = s.protection.RemoveProtection(ctx, pv) - if err != nil { - return false, err - } - - err = s.client.Delete(ctx, pv) - if err != nil && !k8serrors.IsNotFound(err) { - return false, err - } - } - return resourcesHaveDeleted || subResourcesHaveDeleted, nil } @@ -159,7 +141,9 @@ func (s DiskService) CleanUpSupplements(ctx context.Context, sup *supplements.Ge if err != nil && !k8serrors.IsNotFound(err) { return false, err } - pvc, err := s.GetPersistentVolumeClaim(ctx, sup) + + var pvc *corev1.PersistentVolumeClaim + pvc, err = s.GetPersistentVolumeClaim(ctx, sup) if err != nil { return false, err } @@ -177,13 +161,13 @@ func (s DiskService) CleanUpSupplements(ctx context.Context, sup *supplements.Ge return hasDeleted, supplements.CleanupForDataVolume(ctx, s.client, sup, s.dvcrSettings) } -func (s DiskService) Protect(ctx context.Context, owner client.Object, dv *cdiv1.DataVolume, pvc *corev1.PersistentVolumeClaim, pv *corev1.PersistentVolume) error { +func (s DiskService) Protect(ctx context.Context, owner client.Object, dv *cdiv1.DataVolume, pvc *corev1.PersistentVolumeClaim) error { err := s.protection.AddOwnerRef(ctx, owner, pvc) if err != nil { return fmt.Errorf("failed to add owner ref for pvc: %w", err) } - err = s.protection.AddProtection(ctx, dv, pvc, pv) + err = s.protection.AddProtection(ctx, dv, pvc) if err != nil { return fmt.Errorf("failed to add protection for disk's supplements: %w", err) } @@ -259,14 +243,6 @@ func (s DiskService) GetPersistentVolumeClaim(ctx context.Context, sup *suppleme return helper.FetchObject(ctx, sup.PersistentVolumeClaim(), s.client, &corev1.PersistentVolumeClaim{}) } -func (s DiskService) GetPersistentVolume(ctx context.Context, pvc *corev1.PersistentVolumeClaim) (*corev1.PersistentVolume, error) { - if pvc == nil { - return nil, nil - } - - return helper.FetchObject(ctx, types.NamespacedName{Name: pvc.Spec.VolumeName}, s.client, &corev1.PersistentVolume{}) -} - func (s DiskService) CheckImportProcess(ctx context.Context, dv *cdiv1.DataVolume, pvc *corev1.PersistentVolumeClaim, storageClassName *string) error { var err error diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go index bb6c6a2ba..3ae6a486f 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/blank.go @@ -64,19 +64,15 @@ func (ds BlankDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (boo if err != nil { return false, err } - pv, err := ds.diskService.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } switch { case isDiskProvisioningFinished(condition): log.Info("Disk provisioning finished: clean up") - setPhaseConditionForFinishedDisk(pv, pvc, &condition, &vd.Status.Phase, supgen) + setPhaseConditionForFinishedDisk(pvc, &condition, &vd.Status.Phase, supgen) // Protect Ready Disk and underlying PVC and PV. - err = ds.diskService.Protect(ctx, vd, nil, pvc, pv) + err = ds.diskService.Protect(ctx, vd, nil, pvc) if err != nil { return false, err } @@ -87,7 +83,7 @@ func (ds BlankDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (boo } return CleanUpSupplements(ctx, vd, ds) - case common.AnyTerminating(dv, pvc, pv): + case common.AnyTerminating(dv, pvc): log.Info("Waiting for supplements to be terminated") case dv == nil: log.Info("Start import to PVC") @@ -140,7 +136,7 @@ func (ds BlankDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (boo vd.Status.Capacity = ds.diskService.GetCapacity(pvc) vd.Status.Target.PersistentVolumeClaim = dv.Status.ClaimName - err = ds.diskService.Protect(ctx, vd, dv, pvc, pv) + err = ds.diskService.Protect(ctx, vd, dv, pvc) if err != nil { return false, err } diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/http.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/http.go index a0b73f2ba..95ad89a56 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/http.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/http.go @@ -80,19 +80,15 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bool if err != nil { return false, err } - pv, err := ds.diskService.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } switch { case isDiskProvisioningFinished(condition): log.Info("Disk provisioning finished: clean up") - setPhaseConditionForFinishedDisk(pv, pvc, &condition, &vd.Status.Phase, supgen) + setPhaseConditionForFinishedDisk(pvc, &condition, &vd.Status.Phase, supgen) // Protect Ready Disk and underlying PVC and PV. - err = ds.diskService.Protect(ctx, vd, nil, pvc, pv) + err = ds.diskService.Protect(ctx, vd, nil, pvc) if err != nil { return false, err } @@ -109,7 +105,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bool } return CleanUpSupplements(ctx, vd, ds) - case common.AnyTerminating(pod, dv, pvc, pv): + case common.AnyTerminating(pod, dv, pvc): log.Info("Waiting for supplements to be terminated") case pod == nil: log.Info("Start import to DVCR") @@ -231,7 +227,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bool vd.Status.Capacity = ds.diskService.GetCapacity(pvc) vd.Status.Target.PersistentVolumeClaim = dv.Status.ClaimName - err = ds.diskService.Protect(ctx, vd, dv, pvc, pv) + err = ds.diskService.Protect(ctx, vd, dv, pvc) if err != nil { return false, err } diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go index 23b693f8f..6b4efe60c 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/object_ref.go @@ -73,19 +73,15 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) if err != nil { return false, err } - pv, err := ds.diskService.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } switch { case isDiskProvisioningFinished(condition): log.Info("Disk provisioning finished: clean up") - setPhaseConditionForFinishedDisk(pv, pvc, &condition, &vd.Status.Phase, supgen) + setPhaseConditionForFinishedDisk(pvc, &condition, &vd.Status.Phase, supgen) // Protect Ready Disk and underlying PVC and PV. - err = ds.diskService.Protect(ctx, vd, nil, pvc, pv) + err = ds.diskService.Protect(ctx, vd, nil, pvc) if err != nil { return false, err } @@ -96,7 +92,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) } return CleanUpSupplements(ctx, vd, ds) - case common.AnyTerminating(dv, pvc, pv): + case common.AnyTerminating(dv, pvc): log.Info("Waiting for supplements to be terminated") case dv == nil: log.Info("Start import to PVC") @@ -171,7 +167,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) vd.Status.Capacity = ds.diskService.GetCapacity(pvc) vd.Status.Target.PersistentVolumeClaim = dv.Status.ClaimName - err = ds.diskService.Protect(ctx, vd, dv, pvc, pv) + err = ds.diskService.Protect(ctx, vd, dv, pvc) if err != nil { return false, err } diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/registry.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/registry.go index 45d5c1334..cd741af57 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/registry.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/registry.go @@ -86,19 +86,15 @@ func (ds RegistryDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) ( if err != nil { return false, err } - pv, err := ds.diskService.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } switch { case isDiskProvisioningFinished(condition): log.Info("Disk provisioning finished: clean up") - setPhaseConditionForFinishedDisk(pv, pvc, &condition, &vd.Status.Phase, supgen) + setPhaseConditionForFinishedDisk(pvc, &condition, &vd.Status.Phase, supgen) // Protect Ready Disk and underlying PVC and PV. - err = ds.diskService.Protect(ctx, vd, nil, pvc, pv) + err = ds.diskService.Protect(ctx, vd, nil, pvc) if err != nil { return false, err } @@ -235,7 +231,7 @@ func (ds RegistryDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) ( vd.Status.Capacity = ds.diskService.GetCapacity(pvc) vd.Status.Target.PersistentVolumeClaim = dv.Status.ClaimName - err = ds.diskService.Protect(ctx, vd, dv, pvc, pv) + err = ds.diskService.Protect(ctx, vd, dv, pvc) if err != nil { return false, err } diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/sources.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/sources.go index 7b6f60774..fbc099ab5 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/sources.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/sources.go @@ -98,7 +98,6 @@ func isDiskProvisioningFinished(c metav1.Condition) bool { } func setPhaseConditionForFinishedDisk( - pv *corev1.PersistentVolume, pvc *corev1.PersistentVolumeClaim, condition *metav1.Condition, phase *virtv2.DiskPhase, @@ -110,7 +109,7 @@ func setPhaseConditionForFinishedDisk( condition.Status = metav1.ConditionFalse condition.Reason = vdcondition.Lost condition.Message = fmt.Sprintf("PVC %s not found.", supgen.PersistentVolumeClaim().String()) - case pv == nil: + case pvc.Status.Phase == corev1.ClaimLost: *phase = virtv2.DiskLost condition.Status = metav1.ConditionFalse condition.Reason = vdcondition.Lost diff --git a/images/virtualization-artifact/pkg/controller/vd/internal/source/upload.go b/images/virtualization-artifact/pkg/controller/vd/internal/source/upload.go index d39852424..5fd67d067 100644 --- a/images/virtualization-artifact/pkg/controller/vd/internal/source/upload.go +++ b/images/virtualization-artifact/pkg/controller/vd/internal/source/upload.go @@ -88,10 +88,6 @@ func (ds UploadDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bo if err != nil { return false, err } - pv, err := ds.diskService.GetPersistentVolume(ctx, pvc) - if err != nil { - return false, err - } if vd.Status.UploadCommand == "" { if ing != nil && ing.Annotations[common.AnnUploadURL] != "" { @@ -103,10 +99,10 @@ func (ds UploadDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bo case isDiskProvisioningFinished(condition): log.Info("Disk provisioning finished: clean up") - setPhaseConditionForFinishedDisk(pv, pvc, &condition, &vd.Status.Phase, supgen) + setPhaseConditionForFinishedDisk(pvc, &condition, &vd.Status.Phase, supgen) // Protect Ready Disk and underlying PVC and PV. - err = ds.diskService.Protect(ctx, vd, nil, pvc, pv) + err = ds.diskService.Protect(ctx, vd, nil, pvc) if err != nil { return false, err } @@ -258,7 +254,7 @@ func (ds UploadDataSource) Sync(ctx context.Context, vd *virtv2.VirtualDisk) (bo vd.Status.Capacity = ds.diskService.GetCapacity(pvc) vd.Status.Target.PersistentVolumeClaim = dv.Status.ClaimName - err = ds.diskService.Protect(ctx, vd, dv, pvc, pv) + err = ds.diskService.Protect(ctx, vd, dv, pvc) if err != nil { return false, err } diff --git a/images/virtualization-artifact/pkg/controller/vd/vd_reconciler.go b/images/virtualization-artifact/pkg/controller/vd/vd_reconciler.go index c4db5e877..b9a579d88 100644 --- a/images/virtualization-artifact/pkg/controller/vd/vd_reconciler.go +++ b/images/virtualization-artifact/pkg/controller/vd/vd_reconciler.go @@ -194,7 +194,7 @@ func (r *Reconciler) SetupController(_ context.Context, mgr manager.Manager, ctr return true } - return oldPVC.Status.Phase != newPVC.Status.Phase && newPVC.Status.Phase == corev1.ClaimBound + return oldPVC.Status.Phase != newPVC.Status.Phase }, }, ); err != nil {