@@ -132,7 +132,12 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
132132
133133 context := req .GetVolumeContext ()
134134 mountFlags := req .GetVolumeCapability ().GetMount ().GetMountFlags ()
135+ volumeMountGroup := req .GetVolumeCapability ().GetMount ().GetVolumeMountGroup ()
135136 secrets := req .GetSecrets ()
137+ gidPresent , err := checkGidPresentInMountFlags (volumeMountGroup , mountFlags )
138+ if err != nil {
139+ return nil , err
140+ }
136141
137142 source , ok := context [sourceField ]
138143 if ! ok {
@@ -172,6 +177,9 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
172177 }
173178 sensitiveMountOptions = []string {fmt .Sprintf ("%s=%s,%s=%s" , usernameField , username , passwordField , password )}
174179 mountOptions = mountFlags
180+ if ! gidPresent && volumeMountGroup != "" {
181+ mountOptions = append (mountOptions , fmt .Sprintf ("gid=%s" , volumeMountGroup ))
182+ }
175183 if domain != "" {
176184 mountOptions = append (mountOptions , fmt .Sprintf ("%s=%s" , domainField , domain ))
177185 }
@@ -365,3 +373,17 @@ func makeDir(pathname string) error {
365373 }
366374 return nil
367375}
376+
377+ func checkGidPresentInMountFlags (volumeMountGroup string , mountFlags []string ) (bool , error ) {
378+ gidPresentInMountFlags := false
379+ for _ , mountFlag := range mountFlags {
380+ if strings .HasPrefix (mountFlag , "gid" ) {
381+ gidPresentInMountFlags = true
382+ kvpair := strings .Split (mountFlag , "=" )
383+ if volumeMountGroup != "" && len (kvpair ) == 2 && ! strings .EqualFold (volumeMountGroup , kvpair [1 ]) {
384+ return false , status .Error (codes .InvalidArgument , fmt .Sprintf ("gid(%s) in storageClass and pod fsgroup(%s) are not equal" , kvpair [1 ], volumeMountGroup ))
385+ }
386+ }
387+ }
388+ return gidPresentInMountFlags , nil
389+ }
0 commit comments