Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import "strings"

const (
FormatISO = "iso"
FormatRAW = "raw"
FormatRaw = "raw"
)

func IsISO(format string) bool {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package conditions
import (
corev1 "k8s.io/api/core/v1"
virtv1 "kubevirt.io/api/core/v1"
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
)

func GetPodCondition(condType corev1.PodConditionType, conds []corev1.PodCondition) (corev1.PodCondition, bool) {
Expand All @@ -31,6 +32,22 @@ func GetPodCondition(condType corev1.PodConditionType, conds []corev1.PodConditi
return corev1.PodCondition{}, false
}

const (
DVRunningConditionType cdiv1.DataVolumeConditionType = "Running"
DVQoutaNotExceededConditionType cdiv1.DataVolumeConditionType = "QuotaNotExceeded"
DVImagePullFailedReason string = "ImagePullFailed"
)

func GetDataVolumeCondition(condType cdiv1.DataVolumeConditionType, conds []cdiv1.DataVolumeCondition) (cdiv1.DataVolumeCondition, bool) {
for _, cond := range conds {
if cond.Type == condType {
return cond, true
}
}

return cdiv1.DataVolumeCondition{}, false
}

func GetKVVMICondition(condType virtv1.VirtualMachineInstanceConditionType, conds []virtv1.VirtualMachineInstanceCondition) (virtv1.VirtualMachineInstanceCondition, bool) {
for _, cond := range conds {
if cond.Type == condType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ func CapitalizeFirstLetter(s string) string {
return string(runes)
}

// Deprecated. Use conditions.GetDataVolumeCondition instead.
func GetDataVolumeCondition(conditionType cdiv1.DataVolumeConditionType, conditions []cdiv1.DataVolumeCondition) *cdiv1.DataVolumeCondition {
for i, condition := range conditions {
if condition.Type == conditionType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,7 @@ type Bounder interface {
}

type Disk interface {
step.CreateDataVolumeStepDisk
step.WaitForDVStepDisk
CleanUpSupplements(ctx context.Context, sup *supplements.Generator) (bool, error)
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ type ObjectRefDataSource struct {
recorder eventrecord.EventRecorderLogger

viObjectRefOnPvc *ObjectRefDataVirtualImageOnPVC
vdSyncer *ObjectRefVirtualDisk
vdCRSyncer *ObjectRefVirtualDiskCR
vdPVCSyncer *ObjectRefVirtualDiskPVC
vdSnapshotCRSyncer *ObjectRefVirtualDiskSnapshotCR
vdSnapshotPVCSyncer *ObjectRefVirtualDiskSnapshotPVC
}
Expand All @@ -83,15 +84,19 @@ func NewObjectRefDataSource(
diskService: diskService,
recorder: recorder,
viObjectRefOnPvc: NewObjectRefDataVirtualImageOnPVC(recorder, statService, importerService, dvcrSettings, client, diskService),
vdSyncer: NewObjectRefVirtualDisk(recorder, importerService, client, diskService, dvcrSettings, statService),
vdCRSyncer: NewObjectRefVirtualDiskCR(client, importerService, diskService, statService, dvcrSettings, recorder),
vdPVCSyncer: NewObjectRefVirtualDiskPVC(bounderService, client, diskService, recorder),
vdSnapshotCRSyncer: NewObjectRefVirtualDiskSnapshotCR(importerService, statService, diskService, client, dvcrSettings, recorder),
vdSnapshotPVCSyncer: NewObjectRefVirtualDiskSnapshotPVC(importerService, statService, bounderService, client, dvcrSettings, recorder),
vdSnapshotPVCSyncer: NewObjectRefVirtualDiskSnapshotPVC(importerService, statService, bounderService, client, recorder),
}
}

func (ds ObjectRefDataSource) StoreToPVC(ctx context.Context, vi *virtv2.VirtualImage) (reconcile.Result, error) {
if vi.Spec.DataSource.ObjectRef.Kind == virtv2.VirtualDiskSnapshotKind {
switch vi.Spec.DataSource.ObjectRef.Kind {
case virtv2.VirtualDiskSnapshotKind:
return ds.vdSnapshotPVCSyncer.Sync(ctx, vi)
case virtv2.VirtualDiskKind:
return ds.vdPVCSyncer.Sync(ctx, vi)
}

log, ctx := logger.GetDataSourceContext(ctx, objectRefDataSource)
Expand All @@ -115,18 +120,6 @@ func (ds ObjectRefDataSource) StoreToPVC(ctx context.Context, vi *virtv2.Virtual
if viRef.Spec.Storage == virtv2.StorageKubernetes || viRef.Spec.Storage == virtv2.StoragePersistentVolumeClaim {
return ds.viObjectRefOnPvc.StoreToPVC(ctx, vi, viRef, cb)
}
case virtv2.VirtualDiskKind:
vdKey := types.NamespacedName{Name: vi.Spec.DataSource.ObjectRef.Name, Namespace: vi.Namespace}
vd, err := object.FetchObject(ctx, vdKey, ds.client, &virtv2.VirtualDisk{})
if err != nil {
return reconcile.Result{}, fmt.Errorf("unable to get VD %s: %w", vdKey, err)
}

if vd == nil {
return reconcile.Result{}, fmt.Errorf("VD object ref %s is nil", vdKey)
}

return ds.vdSyncer.StoreToPVC(ctx, vi, vd, cb)
}

supgen := supplements.NewGenerator(annotations.VIShortName, vi.Name, vi.Namespace, vi.UID)
Expand Down Expand Up @@ -297,8 +290,11 @@ func (ds ObjectRefDataSource) StoreToPVC(ctx context.Context, vi *virtv2.Virtual
}

func (ds ObjectRefDataSource) StoreToDVCR(ctx context.Context, vi *virtv2.VirtualImage) (reconcile.Result, error) {
if vi.Spec.DataSource.ObjectRef.Kind == virtv2.VirtualDiskSnapshotKind {
switch vi.Spec.DataSource.ObjectRef.Kind {
case virtv2.VirtualDiskSnapshotKind:
return ds.vdSnapshotCRSyncer.Sync(ctx, vi)
case virtv2.VirtualDiskKind:
return ds.vdCRSyncer.Sync(ctx, vi)
}

log, ctx := logger.GetDataSourceContext(ctx, "objectref")
Expand All @@ -322,18 +318,6 @@ func (ds ObjectRefDataSource) StoreToDVCR(ctx context.Context, vi *virtv2.Virtua
if viRef.Spec.Storage == virtv2.StorageKubernetes || viRef.Spec.Storage == virtv2.StoragePersistentVolumeClaim {
return ds.viObjectRefOnPvc.StoreToDVCR(ctx, vi, viRef, cb)
}
case virtv2.VirtualDiskKind:
viKey := types.NamespacedName{Name: vi.Spec.DataSource.ObjectRef.Name, Namespace: vi.Namespace}
vd, err := object.FetchObject(ctx, viKey, ds.client, &virtv2.VirtualDisk{})
if err != nil {
return reconcile.Result{}, fmt.Errorf("unable to get VD %s: %w", viKey, err)
}

if vd == nil {
return reconcile.Result{}, fmt.Errorf("VD object ref %s is nil", viKey)
}

return ds.vdSyncer.StoreToDVCR(ctx, vi, vd, cb)
}

supgen := supplements.NewGenerator(annotations.VIShortName, vi.Name, vi.Namespace, vi.UID)
Expand Down Expand Up @@ -532,16 +516,23 @@ func (ds ObjectRefDataSource) Validate(ctx context.Context, vi *virtv2.VirtualIm

return NewClusterImageNotReadyError(vi.Spec.DataSource.ObjectRef.Name)
case virtv2.VirtualImageObjectRefKindVirtualDisk:
return ds.vdSyncer.Validate(ctx, vi)
switch vi.Spec.Storage {
case virtv2.StorageKubernetes, virtv2.StoragePersistentVolumeClaim:
return ds.vdPVCSyncer.Validate(ctx, vi)
case virtv2.StorageContainerRegistry:
return ds.vdCRSyncer.Validate(ctx, vi)
default:
return fmt.Errorf("unexpected storage: %s", vi.Spec.Storage)
}
case virtv2.VirtualImageObjectRefKindVirtualDiskSnapshot:
switch vi.Spec.Storage {
case virtv2.StorageKubernetes, virtv2.StoragePersistentVolumeClaim:
return ds.vdSnapshotPVCSyncer.Validate(ctx, vi)
case virtv2.StorageContainerRegistry:
return ds.vdSnapshotCRSyncer.Validate(ctx, vi)
default:
return fmt.Errorf("unexpected storage: %s", vi.Spec.Storage)
}

return fmt.Errorf("unexpected object ref kind: %s", vi.Spec.DataSource.ObjectRef.Kind)
default:
return fmt.Errorf("unexpected object ref kind: %s", vi.Spec.DataSource.ObjectRef.Kind)
}
Expand Down
Loading
Loading