Skip to content

Commit 35357c4

Browse files
authored
Merge pull request #379 from verult/fsgroup
Support fsgroup in CSI calls; enable fsgroup e2e tests
2 parents 0862c49 + 8c0a2c7 commit 35357c4

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

pkg/smb/nodeserver.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

pkg/smb/smb.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ func (d *Driver) Run(endpoint, kubeconfig string, testMode bool) {
8888
csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
8989
csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME,
9090
csi.NodeServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER,
91+
csi.NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP,
9192
})
9293

9394
s := csicommon.NewNonBlockingGRPCServer()

test/external-e2e/run.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ setup_e2e_binaries() {
3232
# test on alternative driver name
3333
export EXTRA_HELM_OPTIONS=" --set driver.name=$DRIVER.csi.k8s.io --set controller.name=csi-$DRIVER-controller --set linux.dsName=csi-$DRIVER-node --set windows.dsName=csi-$DRIVER-node-win --set image.csiProvisioner.tag=v3.0.0"
3434
sed -i "s/smb.csi.k8s.io/$DRIVER.csi.k8s.io/g" deploy/example/storageclass-smb.yaml
35+
sed -i "s/gid=/uid=/g" deploy/example/storageclass-smb.yaml
3536
make install-smb-provisioner
3637
make e2e-bootstrap
3738
sed -i "s/csi-smb-controller/csi-$DRIVER-controller/g" deploy/example/metrics/csi-smb-controller-svc.yaml
@@ -51,6 +52,6 @@ trap print_logs EXIT
5152
mkdir -p /tmp/csi
5253
cp deploy/example/storageclass-smb.yaml /tmp/csi/storageclass.yaml
5354
ginkgo -p --progress --v -focus='External.Storage' \
54-
-skip='\[Disruptive\]|\[Slow\]|unmount after the subpath directory is deleted|support two pods which share the same volume' kubernetes/test/bin/e2e.test -- \
55+
-skip='\[Disruptive\]|\[Slow\]|unmount after the subpath directory is deleted|support two pods which share the same volume|volume contents ownership changed' kubernetes/test/bin/e2e.test -- \
5556
-storage.testdriver=$PROJECT_ROOT/test/external-e2e/testdriver.yaml \
5657
--kubeconfig=$KUBECONFIG

test/external-e2e/testdriver.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ DriverInfo:
1111
exec: true
1212
multipods: true
1313
RWX: true
14+
fsGroup: true
15+
volumeMountGroup: true

0 commit comments

Comments
 (0)