Skip to content

Commit 853c599

Browse files
committed
chore(vi): refactor vd object ref
Signed-off-by: Isteb4k <dmitry.rakitin@flant.com>
1 parent 3531454 commit 853c599

27 files changed

+1476
-712
lines changed

images/virtualization-artifact/pkg/common/imageformat/format.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import "strings"
2020

2121
const (
2222
FormatISO = "iso"
23-
FormatRAW = "raw"
23+
FormatRaw = "raw"
2424
)
2525

2626
func IsISO(format string) bool {

images/virtualization-artifact/pkg/controller/conditions/getter.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package conditions
1919
import (
2020
corev1 "k8s.io/api/core/v1"
2121
virtv1 "kubevirt.io/api/core/v1"
22+
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
2223
)
2324

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

35+
const (
36+
DVRunningConditionType cdiv1.DataVolumeConditionType = "Running"
37+
DVQoutaNotExceededConditionType cdiv1.DataVolumeConditionType = "QuotaNotExceeded"
38+
DVImagePullFailedReason string = "ImagePullFailed"
39+
)
40+
41+
func GetDataVolumeCondition(condType cdiv1.DataVolumeConditionType, conds []cdiv1.DataVolumeCondition) (cdiv1.DataVolumeCondition, bool) {
42+
for _, cond := range conds {
43+
if cond.Type == condType {
44+
return cond, true
45+
}
46+
}
47+
48+
return cdiv1.DataVolumeCondition{}, false
49+
}
50+
3451
func GetKVVMICondition(condType virtv1.VirtualMachineInstanceConditionType, conds []virtv1.VirtualMachineInstanceCondition) (virtv1.VirtualMachineInstanceCondition, bool) {
3552
for _, cond := range conds {
3653
if cond.Type == condType {

images/virtualization-artifact/pkg/controller/service/condition.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func CapitalizeFirstLetter(s string) string {
3636
return string(runes)
3737
}
3838

39+
// Deprecated. Use conditions.GetDataVolumeCondition instead.
3940
func GetDataVolumeCondition(conditionType cdiv1.DataVolumeConditionType, conditions []cdiv1.DataVolumeCondition) *cdiv1.DataVolumeCondition {
4041
for i, condition := range conditions {
4142
if condition.Type == conditionType {

images/virtualization-artifact/pkg/controller/service/disk_service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ func (s DiskService) GetVirtualDiskSnapshot(ctx context.Context, name, namespace
558558
return object.FetchObject(ctx, types.NamespacedName{Name: name, Namespace: namespace}, s.client, &virtv2.VirtualDiskSnapshot{})
559559
}
560560

561+
// Deprecated.
561562
func (s DiskService) CheckImportProcess(ctx context.Context, dv *cdiv1.DataVolume, pvc *corev1.PersistentVolumeClaim) error {
562563
if dv == nil {
563564
return nil

images/virtualization-artifact/pkg/controller/vi/internal/source/interfaces.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,7 @@ type Bounder interface {
7474
}
7575

7676
type Disk interface {
77+
step.CreateDataVolumeStepDisk
78+
step.WaitForDVStepDisk
7779
CleanUpSupplements(ctx context.Context, sup *supplements.Generator) (bool, error)
7880
}

images/virtualization-artifact/pkg/controller/vi/internal/source/mock.go

Lines changed: 183 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref.go

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ type ObjectRefDataSource struct {
6060
recorder eventrecord.EventRecorderLogger
6161

6262
viObjectRefOnPvc *ObjectRefDataVirtualImageOnPVC
63-
vdSyncer *ObjectRefVirtualDisk
63+
vdCRSyncer *ObjectRefVirtualDiskCR
64+
vdPVCSyncer *ObjectRefVirtualDiskPVC
6465
vdSnapshotCRSyncer *ObjectRefVirtualDiskSnapshotCR
6566
vdSnapshotPVCSyncer *ObjectRefVirtualDiskSnapshotPVC
6667
}
@@ -83,15 +84,19 @@ func NewObjectRefDataSource(
8384
diskService: diskService,
8485
recorder: recorder,
8586
viObjectRefOnPvc: NewObjectRefDataVirtualImageOnPVC(recorder, statService, importerService, dvcrSettings, client, diskService),
86-
vdSyncer: NewObjectRefVirtualDisk(recorder, importerService, client, diskService, dvcrSettings, statService),
87+
vdCRSyncer: NewObjectRefVirtualDiskCR(client, importerService, diskService, statService, dvcrSettings, recorder),
88+
vdPVCSyncer: NewObjectRefVirtualDiskPVC(bounderService, client, diskService, recorder),
8789
vdSnapshotCRSyncer: NewObjectRefVirtualDiskSnapshotCR(importerService, statService, diskService, client, dvcrSettings, recorder),
88-
vdSnapshotPVCSyncer: NewObjectRefVirtualDiskSnapshotPVC(importerService, statService, bounderService, client, dvcrSettings, recorder),
90+
vdSnapshotPVCSyncer: NewObjectRefVirtualDiskSnapshotPVC(importerService, statService, bounderService, client, recorder),
8991
}
9092
}
9193

9294
func (ds ObjectRefDataSource) StoreToPVC(ctx context.Context, vi *virtv2.VirtualImage) (reconcile.Result, error) {
93-
if vi.Spec.DataSource.ObjectRef.Kind == virtv2.VirtualDiskSnapshotKind {
95+
switch vi.Spec.DataSource.ObjectRef.Kind {
96+
case virtv2.VirtualDiskSnapshotKind:
9497
return ds.vdSnapshotPVCSyncer.Sync(ctx, vi)
98+
case virtv2.VirtualDiskKind:
99+
return ds.vdPVCSyncer.Sync(ctx, vi)
95100
}
96101

97102
log, ctx := logger.GetDataSourceContext(ctx, objectRefDataSource)
@@ -115,18 +120,6 @@ func (ds ObjectRefDataSource) StoreToPVC(ctx context.Context, vi *virtv2.Virtual
115120
if viRef.Spec.Storage == virtv2.StorageKubernetes || viRef.Spec.Storage == virtv2.StoragePersistentVolumeClaim {
116121
return ds.viObjectRefOnPvc.StoreToPVC(ctx, vi, viRef, cb)
117122
}
118-
case virtv2.VirtualDiskKind:
119-
vdKey := types.NamespacedName{Name: vi.Spec.DataSource.ObjectRef.Name, Namespace: vi.Namespace}
120-
vd, err := object.FetchObject(ctx, vdKey, ds.client, &virtv2.VirtualDisk{})
121-
if err != nil {
122-
return reconcile.Result{}, fmt.Errorf("unable to get VD %s: %w", vdKey, err)
123-
}
124-
125-
if vd == nil {
126-
return reconcile.Result{}, fmt.Errorf("VD object ref %s is nil", vdKey)
127-
}
128-
129-
return ds.vdSyncer.StoreToPVC(ctx, vi, vd, cb)
130123
}
131124

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

299292
func (ds ObjectRefDataSource) StoreToDVCR(ctx context.Context, vi *virtv2.VirtualImage) (reconcile.Result, error) {
300-
if vi.Spec.DataSource.ObjectRef.Kind == virtv2.VirtualDiskSnapshotKind {
293+
switch vi.Spec.DataSource.ObjectRef.Kind {
294+
case virtv2.VirtualDiskSnapshotKind:
301295
return ds.vdSnapshotCRSyncer.Sync(ctx, vi)
296+
case virtv2.VirtualDiskKind:
297+
return ds.vdCRSyncer.Sync(ctx, vi)
302298
}
303299

304300
log, ctx := logger.GetDataSourceContext(ctx, "objectref")
@@ -322,18 +318,6 @@ func (ds ObjectRefDataSource) StoreToDVCR(ctx context.Context, vi *virtv2.Virtua
322318
if viRef.Spec.Storage == virtv2.StorageKubernetes || viRef.Spec.Storage == virtv2.StoragePersistentVolumeClaim {
323319
return ds.viObjectRefOnPvc.StoreToDVCR(ctx, vi, viRef, cb)
324320
}
325-
case virtv2.VirtualDiskKind:
326-
viKey := types.NamespacedName{Name: vi.Spec.DataSource.ObjectRef.Name, Namespace: vi.Namespace}
327-
vd, err := object.FetchObject(ctx, viKey, ds.client, &virtv2.VirtualDisk{})
328-
if err != nil {
329-
return reconcile.Result{}, fmt.Errorf("unable to get VD %s: %w", viKey, err)
330-
}
331-
332-
if vd == nil {
333-
return reconcile.Result{}, fmt.Errorf("VD object ref %s is nil", viKey)
334-
}
335-
336-
return ds.vdSyncer.StoreToDVCR(ctx, vi, vd, cb)
337321
}
338322

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

533517
return NewClusterImageNotReadyError(vi.Spec.DataSource.ObjectRef.Name)
534518
case virtv2.VirtualImageObjectRefKindVirtualDisk:
535-
return ds.vdSyncer.Validate(ctx, vi)
519+
switch vi.Spec.Storage {
520+
case virtv2.StorageKubernetes, virtv2.StoragePersistentVolumeClaim:
521+
return ds.vdPVCSyncer.Validate(ctx, vi)
522+
case virtv2.StorageContainerRegistry:
523+
return ds.vdCRSyncer.Validate(ctx, vi)
524+
default:
525+
return fmt.Errorf("unexpected storage: %s", vi.Spec.Storage)
526+
}
536527
case virtv2.VirtualImageObjectRefKindVirtualDiskSnapshot:
537528
switch vi.Spec.Storage {
538529
case virtv2.StorageKubernetes, virtv2.StoragePersistentVolumeClaim:
539530
return ds.vdSnapshotPVCSyncer.Validate(ctx, vi)
540531
case virtv2.StorageContainerRegistry:
541532
return ds.vdSnapshotCRSyncer.Validate(ctx, vi)
533+
default:
534+
return fmt.Errorf("unexpected storage: %s", vi.Spec.Storage)
542535
}
543-
544-
return fmt.Errorf("unexpected object ref kind: %s", vi.Spec.DataSource.ObjectRef.Kind)
545536
default:
546537
return fmt.Errorf("unexpected object ref kind: %s", vi.Spec.DataSource.ObjectRef.Kind)
547538
}

0 commit comments

Comments
 (0)