Skip to content

Commit 7b25f5b

Browse files
committed
feat: disable GET_VOLUME_STATS by default
fix test
1 parent 2d2522c commit 7b25f5b

File tree

10 files changed

+71
-16
lines changed

10 files changed

+71
-16
lines changed

charts/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ The following table lists the configurable parameters of the latest SMB CSI Driv
3636

3737
| Parameter | Description | Default |
3838
|---------------------------------------------------|------------------------------------------------------------|-------------------------------------------------------------------|
39+
| `driver.name` | alternative driver name | `smb.csi.k8s.io` |
40+
| `feature.enableGetVolumeStats` | allow GET_VOLUME_STATS on agent node | `false` |
3941
| `image.baseRepo` | base repository of driver images | `mcr.microsoft.com` |
4042
| `image.smb.repository` | csi-driver-smb docker image | `/k8s/csi/smb-csi` |
4143
| `image.smb.tag` | csi-driver-smb docker image tag | `latest` |
43 Bytes
Binary file not shown.

charts/latest/csi-driver-smb/templates/csi-smb-node-windows.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ spec:
9393
- --endpoint=$(CSI_ENDPOINT)
9494
- --nodeid=$(KUBE_NODE_NAME)
9595
- "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}"
96+
- "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}"
9697
ports:
9798
- containerPort: {{ .Values.node.livenessProbe.healthPort }}
9899
name: healthz

charts/latest/csi-driver-smb/templates/csi-smb-node.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ spec:
101101
- "--endpoint=$(CSI_ENDPOINT)"
102102
- "--nodeid=$(KUBE_NODE_NAME)"
103103
- "--metrics-address=0.0.0.0:{{ .Values.node.metricsPort }}"
104+
- "--enable-get-volume-stats={{ .Values.feature.enableGetVolumeStats }}"
104105
ports:
105106
- containerPort: {{ .Values.node.livenessProbe.healthPort }}
106107
name: healthz

charts/latest/csi-driver-smb/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ rbac:
2828
driver:
2929
name: smb.csi.k8s.io
3030

31+
feature:
32+
enableGetVolumeStats: false
33+
3134
controller:
3235
name: csi-smb-controller
3336
replicas: 2

pkg/smb/nodeserver_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,3 +660,45 @@ func TestNodeGetVolumeStats(t *testing.T) {
660660
err := os.RemoveAll(fakePath)
661661
assert.NoError(t, err)
662662
}
663+
664+
func TestCheckGidPresentInMountFlags(t *testing.T) {
665+
tests := []struct {
666+
desc string
667+
VolumeMountGroup string
668+
MountFlags []string
669+
expectedErr error
670+
result bool
671+
}{
672+
{
673+
desc: "[Error] VolumeMountGroup is different from gid in mount options",
674+
VolumeMountGroup: "2000",
675+
MountFlags: []string{"gid=3000"},
676+
expectedErr: status.Error(codes.InvalidArgument, "gid(3000) in storageClass and pod fsgroup(2000) are not equal"),
677+
result: false,
678+
},
679+
{
680+
desc: "[Success] Gid present in mount flags",
681+
VolumeMountGroup: "",
682+
MountFlags: []string{"gid=3000"},
683+
expectedErr: nil,
684+
result: true,
685+
},
686+
{
687+
desc: "[Success] Gid not present in mount flags",
688+
VolumeMountGroup: "",
689+
MountFlags: []string{},
690+
expectedErr: nil,
691+
result: false,
692+
},
693+
}
694+
695+
for _, test := range tests {
696+
gIDPresent, err := checkGidPresentInMountFlags(test.VolumeMountGroup, test.MountFlags)
697+
if !reflect.DeepEqual(err, test.expectedErr) {
698+
t.Errorf("[%s]: Unexpected Error: %v, expected error: %v", test.desc, err, test.expectedErr)
699+
}
700+
if gIDPresent != test.result {
701+
t.Errorf("[%s]: Expected result : %t, Actual result: %t", test.desc, test.result, gIDPresent)
702+
}
703+
}
704+
}

pkg/smb/smb.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,19 @@ type Driver struct {
3939
mounter *mount.SafeFormatAndMount
4040
// A map storing all volumes with ongoing operations so that additional operations
4141
// for that same volume (as defined by VolumeID) return an Aborted error
42-
volumeLocks *volumeLocks
43-
workingMountDir string
42+
volumeLocks *volumeLocks
43+
workingMountDir string
44+
enableGetVolumeStats bool
4445
}
4546

4647
// NewDriver Creates a NewCSIDriver object. Assumes vendor version is equal to driver version &
4748
// does not support optional driver plugin info manifest field. Refer to CSI spec for more details.
48-
func NewDriver(nodeID, driverName string) *Driver {
49+
func NewDriver(nodeID, driverName string, enableGetVolumeStats bool) *Driver {
4950
driver := Driver{}
5051
driver.Name = driverName
5152
driver.Version = driverVersion
5253
driver.NodeID = nodeID
54+
driver.enableGetVolumeStats = enableGetVolumeStats
5355
driver.volumeLocks = newVolumeLocks()
5456
return &driver
5557
}
@@ -84,12 +86,15 @@ func (d *Driver) Run(endpoint, kubeconfig string, testMode bool) {
8486
csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
8587
})
8688

87-
d.AddNodeServiceCapabilities([]csi.NodeServiceCapability_RPC_Type{
88-
csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
89+
nodeCap := []csi.NodeServiceCapability_RPC_Type{
8990
csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME,
9091
csi.NodeServiceCapability_RPC_SINGLE_NODE_MULTI_WRITER,
9192
csi.NodeServiceCapability_RPC_VOLUME_MOUNT_GROUP,
92-
})
93+
}
94+
if d.enableGetVolumeStats {
95+
nodeCap = append(nodeCap, csi.NodeServiceCapability_RPC_GET_VOLUME_STATS)
96+
}
97+
d.AddNodeServiceCapabilities(nodeCap)
9398

9499
s := csicommon.NewNonBlockingGRPCServer()
95100
// Driver d act as IdentityServer, ControllerServer and NodeServer

pkg/smb/smb_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ const (
3030
)
3131

3232
func NewFakeDriver() *Driver {
33-
return NewDriver(fakeNodeID, DefaultDriverName)
33+
return NewDriver(fakeNodeID, DefaultDriverName, true)
3434
}
3535

3636
func TestNewFakeDriver(t *testing.T) {
3737
// Test New fake driver.
38-
d := NewDriver(fakeNodeID, DefaultDriverName)
38+
d := NewDriver(fakeNodeID, DefaultDriverName, true)
3939
assert.NotNil(t, d)
4040
}
4141

pkg/smbplugin/main.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@ func init() {
3636
}
3737

3838
var (
39-
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
40-
nodeID = flag.String("nodeid", "", "node id")
41-
driverName = flag.String("drivername", smb.DefaultDriverName, "name of the driver")
42-
version = flag.Bool("version", false, "Print the version and exit.")
43-
metricsAddress = flag.String("metrics-address", "0.0.0.0:29644", "export the metrics")
44-
kubeconfig = flag.String("kubeconfig", "", "Absolute path to the kubeconfig file. Required only when running out of cluster.")
39+
endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint")
40+
nodeID = flag.String("nodeid", "", "node id")
41+
driverName = flag.String("drivername", smb.DefaultDriverName, "name of the driver")
42+
version = flag.Bool("version", false, "Print the version and exit.")
43+
metricsAddress = flag.String("metrics-address", "0.0.0.0:29644", "export the metrics")
44+
kubeconfig = flag.String("kubeconfig", "", "Absolute path to the kubeconfig file. Required only when running out of cluster.")
45+
enableGetVolumeStats = flag.Bool("enable-get-volume-stats", false, "allow GET_VOLUME_STATS on agent node")
4546
)
4647

4748
func main() {
@@ -64,7 +65,7 @@ func main() {
6465
}
6566

6667
func handle() {
67-
driver := smb.NewDriver(*nodeID, *driverName)
68+
driver := smb.NewDriver(*nodeID, *driverName, *enableGetVolumeStats)
6869
if driver == nil {
6970
klog.Fatalln("Failed to initialize smb CSI Driver")
7071
}

test/e2e/suite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ var _ = ginkgo.BeforeSuite(func() {
100100

101101
nodeid := os.Getenv("nodeid")
102102
kubeconfig := os.Getenv(kubeconfigEnvVar)
103-
smbDriver = smb.NewDriver(nodeid, smb.DefaultDriverName)
103+
smbDriver = smb.NewDriver(nodeid, smb.DefaultDriverName, false)
104104
go func() {
105105
smbDriver.Run(fmt.Sprintf("unix:///tmp/csi-%s.sock", uuid.NewUUID().String()), kubeconfig, false)
106106
}()

0 commit comments

Comments
 (0)