@@ -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
9294func (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
299292func (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