@@ -93,26 +93,11 @@ func parseZoned(zonedString string, kind v1.AzureDataDiskKind) (bool, error) {
93
93
}
94
94
95
95
func (p * azureDiskProvisioner ) Provision (selectedNode * v1.Node , allowedTopologies []v1.TopologySelectorTerm ) (* v1.PersistentVolume , error ) {
96
- if ! util .AccessModesContainedInAll (p .plugin .GetAccessModes (), p .options .PVC .Spec .AccessModes ) {
97
- return nil , fmt .Errorf ("invalid AccessModes %v: only AccessModes %v are supported" , p .options .PVC .Spec .AccessModes , p .plugin .GetAccessModes ())
98
- }
99
- supportedModes := p .plugin .GetAccessModes ()
100
-
101
96
// perform static validation first
102
97
if p .options .PVC .Spec .Selector != nil {
103
98
return nil , fmt .Errorf ("azureDisk - claim.Spec.Selector is not supported for dynamic provisioning on Azure disk" )
104
99
}
105
100
106
- if len (p .options .PVC .Spec .AccessModes ) > 1 {
107
- return nil , fmt .Errorf ("AzureDisk - multiple access modes are not supported on AzureDisk plugin" )
108
- }
109
-
110
- if len (p .options .PVC .Spec .AccessModes ) == 1 {
111
- if p .options .PVC .Spec .AccessModes [0 ] != supportedModes [0 ] {
112
- return nil , fmt .Errorf ("AzureDisk - mode %s is not supported by AzureDisk plugin (supported mode is %s)" , p .options .PVC .Spec .AccessModes [0 ], supportedModes )
113
- }
114
- }
115
-
116
101
var (
117
102
location , account string
118
103
storageAccountType , fsType string
@@ -194,6 +179,30 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
194
179
}
195
180
}
196
181
182
+ supportedModes := p .plugin .GetAccessModes ()
183
+ if maxShares < 2 {
184
+ // only do AccessModes validation when maxShares < 2
185
+ if ! util .AccessModesContainedInAll (p .plugin .GetAccessModes (), p .options .PVC .Spec .AccessModes ) {
186
+ return nil , fmt .Errorf ("invalid AccessModes %v: only AccessModes %v are supported with maxShares(%d) < 2" , p .options .PVC .Spec .AccessModes , p .plugin .GetAccessModes (), maxShares )
187
+ }
188
+
189
+ if len (p .options .PVC .Spec .AccessModes ) > 1 {
190
+ return nil , fmt .Errorf ("AzureDisk - multiple access modes are not supported on AzureDisk plugin with maxShares(%d) < 2" , maxShares )
191
+ }
192
+
193
+ if len (p .options .PVC .Spec .AccessModes ) == 1 {
194
+ if p .options .PVC .Spec .AccessModes [0 ] != supportedModes [0 ] {
195
+ return nil , fmt .Errorf ("AzureDisk - mode %s is not supported by AzureDisk plugin (supported mode is %s) with maxShares(%d) < 2" , p .options .PVC .Spec .AccessModes [0 ], supportedModes , maxShares )
196
+ }
197
+ }
198
+ } else {
199
+ supportedModes = []v1.PersistentVolumeAccessMode {
200
+ v1 .ReadWriteOnce ,
201
+ v1 .ReadOnlyMany ,
202
+ v1 .ReadWriteMany ,
203
+ }
204
+ }
205
+
197
206
// normalize values
198
207
skuName , err := normalizeStorageAccountType (storageAccountType )
199
208
if err != nil {
0 commit comments