@@ -105,7 +105,9 @@ var CapabilitiesByProvisionerKey = map[string][]StorageCapabilities{
105105 // IBM VPC File CSI
106106 "vpc.file.csi.ibm.io" : {{rwx , file }, {rwo , file }},
107107 "vpc.file.csi.ibm.io/dp2" : {{rwx , file }, {rwo , file }},
108+ "vpc.file.csi.ibm.io/dp2-rwo" : {{rwo , file }},
108109 "vpc.file.csi.ibm.io/rfs" : {{rwx , file }, {rwo , file }},
110+ "vpc.file.csi.ibm.io/rfs-rwo" : {{rwo , file }},
109111 // Portworx in-tree CSI
110112 "kubernetes.io/portworx-volume/nfs" : {{rwx , file }, {rwo , file }},
111113 "kubernetes.io/portworx-volume" : {{rwx , block }, {rwx , file }, {rwo , block }, {rwo , file }},
@@ -164,7 +166,9 @@ var SourceFormatsByProvisionerKey = map[string]cdiv1.DataImportCronSourceFormat{
164166 "pd.csi.storage.gke.io/hyperdisk" : cdiv1 .DataImportCronSourceFormatSnapshot ,
165167 "vpc.file.csi.ibm.io" : cdiv1 .DataImportCronSourceFormatSnapshot ,
166168 "vpc.file.csi.ibm.io/dp2" : cdiv1 .DataImportCronSourceFormatSnapshot ,
169+ "vpc.file.csi.ibm.io/dp2-rwo" : cdiv1 .DataImportCronSourceFormatSnapshot ,
167170 "vpc.file.csi.ibm.io/rfs" : cdiv1 .DataImportCronSourceFormatSnapshot ,
171+ "vpc.file.csi.ibm.io/rfs-rwo" : cdiv1 .DataImportCronSourceFormatSnapshot ,
168172}
169173
170174// CloneStrategyByProvisionerKey defines the advised clone strategy for a provisioner
@@ -180,7 +184,9 @@ var CloneStrategyByProvisionerKey = map[string]cdiv1.CDICloneStrategy{
180184 "vpc.block.csi.ibm.io" : cdiv1 .CloneStrategyHostAssisted ,
181185 "vpc.file.csi.ibm.io" : cdiv1 .CloneStrategySnapshot ,
182186 "vpc.file.csi.ibm.io/dp2" : cdiv1 .CloneStrategySnapshot ,
187+ "vpc.file.csi.ibm.io/dp2-rwo" : cdiv1 .CloneStrategySnapshot ,
183188 "vpc.file.csi.ibm.io/rfs" : cdiv1 .CloneStrategySnapshot ,
189+ "vpc.file.csi.ibm.io/rfs-rwo" : cdiv1 .CloneStrategySnapshot ,
184190 "rbd.csi.ceph.com" : cdiv1 .CloneStrategyCsiClone ,
185191 "rook-ceph.rbd.csi.ceph.com" : cdiv1 .CloneStrategyCsiClone ,
186192 "openshift-storage.rbd.csi.ceph.com" : cdiv1 .CloneStrategyCsiClone ,
@@ -220,7 +226,8 @@ var MinimumSupportedPVCSizeByProvisionerKey = map[string]string{
220226 // https://cloud.google.com/netapp/volumes/docs/discover/service-levels
221227 "csi.trident.netapp.io/gcnv-flex" : "1Gi" ,
222228 // IBM VPC File Storage - RFS profile has fixed minimum
223- "vpc.file.csi.ibm.io/rfs" : "1Gi" ,
229+ "vpc.file.csi.ibm.io/rfs" : "1Gi" ,
230+ "vpc.file.csi.ibm.io/rfs-rwo" : "1Gi" ,
224231}
225232
226233// UseReadWriteOnceForDataImportCronByProvisionerKey is a hash of provisioners which require RWO access mode for DataImportCron PVCs
@@ -328,7 +335,7 @@ func GetAdvisedCloneStrategy(sc *storagev1.StorageClass) (cdiv1.CDICloneStrategy
328335func GetMinimumSupportedPVCSize (sc * storagev1.StorageClass ) (string , bool ) {
329336 provisionerKey := storageProvisionerKey (sc )
330337 // Check for provisioners with dynamic minimum size calculation
331- if provisionerKey == "vpc.file.csi.ibm.io/dp2" {
338+ if provisionerKey == "vpc.file.csi.ibm.io/dp2" || provisionerKey == "vpc.file.csi.ibm.io/dp2-rwo" {
332339 return getIBMVPCFileDP2MinimumSize (sc )
333340 }
334341 size , found := MinimumSupportedPVCSizeByProvisionerKey [provisionerKey ]
@@ -594,11 +601,22 @@ var storageClassToProvisionerKeyMapper = map[string]func(sc *storagev1.StorageCl
594601 return "vpc.file.csi.ibm.io"
595602 }
596603 profile := sc .Parameters ["profile" ]
604+ // When vmState is true, use RWO-specific variants
605+ vmState := sc .Parameters ["vmState" ]
606+
597607 switch profile {
598608 case "rfs" :
599- return "vpc.file.csi.ibm.io/rfs"
609+ if vmState == "true" {
610+ return "vpc.file.csi.ibm.io/rfs-rwo"
611+ } else {
612+ return "vpc.file.csi.ibm.io/rfs"
613+ }
600614 case "dp2" :
601- return "vpc.file.csi.ibm.io/dp2"
615+ if vmState == "true" {
616+ return "vpc.file.csi.ibm.io/dp2-rwo"
617+ } else {
618+ return "vpc.file.csi.ibm.io/dp2"
619+ }
602620 default :
603621 return "vpc.file.csi.ibm.io"
604622 }
0 commit comments