@@ -13,16 +13,18 @@ type VolumeMode = 'Filesystem' | 'Block';
1313export const initialAccessModes : AccessMode [ ] = [ 'ReadWriteOnce' , 'ReadWriteMany' , 'ReadOnlyMany' ] ;
1414export const initialVolumeModes : VolumeMode [ ] = [ 'Filesystem' , 'Block' ] ;
1515
16+ type PartialMatch = { partialMatch ?: boolean } ;
1617type ModeMapping = {
1718 [ volumeMode in VolumeMode ] ?: AccessMode [ ] ;
1819} ;
20+ type AccessModeMapping = ModeMapping & PartialMatch ;
1921
2022type ProvisionerAccessModeMapping = {
21- [ provisioner : string ] : ModeMapping ;
23+ [ provisioner : string ] : AccessModeMapping ;
2224} ;
2325
2426// See https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes for more details
25- export const provisionerAccessModeMapping : ProvisionerAccessModeMapping = {
27+ export const provisionerAccessModeMapping : ProvisionerAccessModeMapping = Object . freeze ( {
2628 'kubernetes.io/no-provisioner' : {
2729 Filesystem : [ 'ReadWriteOnce' ] ,
2830 Block : [ 'ReadWriteOnce' ] ,
@@ -100,14 +102,16 @@ export const provisionerAccessModeMapping: ProvisionerAccessModeMapping = {
100102 Filesystem : [ 'ReadWriteOnce' ] ,
101103 Block : [ 'ReadWriteOnce' ] ,
102104 } ,
103- 'openshift-storage. cephfs.csi.ceph.com' : {
105+ 'cephfs.csi.ceph.com' : {
104106 Filesystem : [ 'ReadWriteOnce' , 'ReadWriteMany' , 'ReadOnlyMany' ] ,
107+ partialMatch : true ,
105108 } ,
106- 'openshift-storage. rbd.csi.ceph.com' : {
109+ 'rbd.csi.ceph.com' : {
107110 Filesystem : [ 'ReadWriteOnce' , 'ReadOnlyMany' ] ,
108111 Block : [ 'ReadWriteOnce' , 'ReadWriteMany' , 'ReadOnlyMany' ] ,
112+ partialMatch : true ,
109113 } ,
110- } ;
114+ } ) ;
111115
112116export const getAccessModeRadios = ( ) => [
113117 {
@@ -141,17 +145,27 @@ export const dropdownUnits = {
141145 Ti : 'TiB' ,
142146} ;
143147
144- const getProvisionerAccessModeMapping = ( provisioner : string ) : ModeMapping => {
145- return provisionerAccessModeMapping [ provisioner ] || { } ;
146- } ;
148+ export const getProvisionerModeMapping = ( provisioner : string ) : ModeMapping =>
149+ _ . omit (
150+ _ . find ( provisionerAccessModeMapping , ( value : AccessModeMapping , key : string ) => {
151+ if ( value ?. partialMatch && provisioner ?. includes ( key ) ) {
152+ return true ;
153+ }
154+ if ( key === provisioner ) {
155+ return true ;
156+ }
157+ return false ;
158+ } ) || { } ,
159+ 'partialMatch' ,
160+ ) ;
147161
148162export const getAccessModeForProvisioner = (
149163 provisioner : string ,
150164 ignoreReadOnly ?: boolean ,
151165 volumeMode ?: string ,
152166) : AccessMode [ ] => {
153167 let accessModes : AccessMode [ ] ;
154- const modeMapping : ModeMapping = getProvisionerAccessModeMapping ( provisioner ) ;
168+ const modeMapping : ModeMapping = getProvisionerModeMapping ( provisioner ) ;
155169
156170 if ( ! _ . isEmpty ( modeMapping ) ) {
157171 accessModes = volumeMode
@@ -174,7 +188,7 @@ export const getVolumeModeForProvisioner = (
174188 provisioner : string ,
175189 accessMode : string ,
176190) : VolumeMode [ ] => {
177- const modeMapping : ModeMapping = getProvisionerAccessModeMapping ( provisioner ) ;
191+ const modeMapping : ModeMapping = getProvisionerModeMapping ( provisioner ) ;
178192
179193 if ( ! _ . isEmpty ( modeMapping ) ) {
180194 return accessMode
0 commit comments