@@ -247,7 +247,8 @@ func (r *ReconcileCnsRegisterVolume) Reconcile(ctx context.Context,
247
247
// Currently file volume registration is not supported.
248
248
ok := isBlockVolumeRegisterRequest (ctx , instance )
249
249
if ! ok {
250
- msg := fmt .Sprintf ("AccessMode: %s is not supported" , instance .Spec .AccessMode )
250
+ msg := fmt .Sprintf ("AccessMode: %s is not supported with volume %s is not supported" ,
251
+ instance .Spec .AccessMode , instance .Spec .VolumeMode )
251
252
log .Error (msg )
252
253
setInstanceError (ctx , r , instance , msg )
253
254
return reconcile.Result {RequeueAfter : timeout }, nil
@@ -482,7 +483,7 @@ func (r *ReconcileCnsRegisterVolume) Reconcile(ctx context.Context,
482
483
Name : instance .Spec .PvcName ,
483
484
}
484
485
pvSpec := getPersistentVolumeSpec (pvName , volumeID , capacityInMb ,
485
- accessMode , storageClassName , claimRef )
486
+ accessMode , instance . Spec . VolumeMode , storageClassName , claimRef , instance . Spec . FsType )
486
487
pvSpec .Spec .NodeAffinity = pvNodeAffinity
487
488
log .Debugf ("PV spec is: %+v" , pvSpec )
488
489
pv , err = k8sclient .CoreV1 ().PersistentVolumes ().Create (ctx , pvSpec , metav1.CreateOptions {})
@@ -510,7 +511,7 @@ func (r *ReconcileCnsRegisterVolume) Reconcile(ctx context.Context,
510
511
// Create PVC mapping to above created PV.
511
512
log .Infof ("Creating PVC: %s" , instance .Spec .PvcName )
512
513
pvcSpec , err := getPersistentVolumeClaimSpec (ctx , instance .Spec .PvcName , instance .Namespace , capacityInMb ,
513
- storageClassName , accessMode , pvName , datastoreAccessibleTopology )
514
+ storageClassName , accessMode , instance . Spec . VolumeMode , pvName , datastoreAccessibleTopology )
514
515
if err != nil {
515
516
msg := fmt .Sprintf ("Failed to create spec for PVC: %q. Error: %v" , instance .Spec .PvcName , err )
516
517
log .Errorf (msg )
@@ -701,6 +702,16 @@ func validateCnsRegisterVolumeSpec(ctx context.Context, instance *cnsregistervol
701
702
} else if instance .Spec .DiskURLPath != "" && instance .Spec .AccessMode != "" &&
702
703
instance .Spec .AccessMode != v1 .ReadWriteOnce {
703
704
msg = fmt .Sprintf ("DiskURLPath cannot be used with accessMode: %q" , instance .Spec .AccessMode )
705
+ } else if instance .Spec .AccessMode == v1 .ReadWriteMany && instance .Spec .VolumeMode != "" && instance .Spec .VolumeMode != v1 .PersistentVolumeBlock {
706
+ return errors .New (fmt .Sprintf ("AccessMode %q is not allowed with VolumeMode %q" , instance .Spec .AccessMode , instance .Spec .VolumeMode ))
707
+ }
708
+ if instance .Spec .VolumeID != "" && instance .Spec .AccessMode == "" {
709
+ return errors .New (fmt .Sprintf ("AccessMode cannot be empty when VolumeID is provided" ))
710
+ }
711
+ if instance .Spec .AccessMode == v1 .ReadWriteMany {
712
+ if instance .Spec .VolumeMode != "" || instance .Spec .VolumeMode != v1 .PersistentVolumeFilesystem {
713
+ return errors .New (fmt .Sprintf ("AccessMode %q is not allowed with VolumeMode %q" , instance .Spec .AccessMode , instance .Spec .VolumeMode ))
714
+ }
704
715
}
705
716
if instance .Spec .VolumeID != "" {
706
717
pvName , found := commonco .ContainerOrchestratorUtility .GetPVNameFromCSIVolumeID (instance .Spec .VolumeID )
@@ -721,7 +732,7 @@ func validateCnsRegisterVolumeSpec(ctx context.Context, instance *cnsregistervol
721
732
// via CnsRegisterVolume instance.
722
733
func isBlockVolumeRegisterRequest (ctx context.Context , instance * cnsregistervolumev1alpha1.CnsRegisterVolume ) bool {
723
734
if instance .Spec .AccessMode != "" {
724
- if instance .Spec .AccessMode == v1 .ReadWriteOnce {
735
+ if instance .Spec .AccessMode == v1 .ReadWriteOnce || ( instance . Spec . AccessMode == v1 . ReadWriteMany && instance . Spec . VolumeMode == v1 . PersistentVolumeBlock ) {
725
736
return true
726
737
}
727
738
} else {
0 commit comments