From bde916d541da370ff42da4d0f19ea5ec7ec79c3c Mon Sep 17 00:00:00 2001 From: Anton Myagkov Date: Fri, 4 Oct 2024 11:11:49 +0000 Subject: [PATCH] fix: check access mode on stage step --- .../tools/csi_driver/internal/driver/node.go | 13 +++++++++++++ .../tools/csi_driver/internal/driver/node_test.go | 8 ++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cloud/blockstore/tools/csi_driver/internal/driver/node.go b/cloud/blockstore/tools/csi_driver/internal/driver/node.go index 237e0fe5a0d..7805e82a5b6 100644 --- a/cloud/blockstore/tools/csi_driver/internal/driver/node.go +++ b/cloud/blockstore/tools/csi_driver/internal/driver/node.go @@ -154,7 +154,20 @@ func (s *nodeService) NodeStageVolume( "VolumeCapability is missing in NodeStageVolumeRequest") } + accessMode := req.VolumeCapability.AccessMode + if accessMode == nil { + return nil, s.statusError( + codes.InvalidArgument, + "AccessMode is missing in NodePublishVolumeRequest") + } + nfsBackend := (req.VolumeContext[backendVolumeContextKey] == "nfs") + if !nfsBackend && accessMode.GetMode() == + csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER { + return nil, s.statusError( + codes.InvalidArgument, + "ReadWriteMany access mode is supported only with nfs backend") + } var err error switch req.VolumeCapability.GetAccessType().(type) { diff --git a/cloud/blockstore/tools/csi_driver/internal/driver/node_test.go b/cloud/blockstore/tools/csi_driver/internal/driver/node_test.go index 1e0ffbc2a1b..9a88cef3473 100644 --- a/cloud/blockstore/tools/csi_driver/internal/driver/node_test.go +++ b/cloud/blockstore/tools/csi_driver/internal/driver/node_test.go @@ -839,9 +839,13 @@ func TestPublishDeviceWithReadWriteManyModeIsNotSupportedWithNBS(t *testing.T) { _, err = nodeService.NodeStageVolume(ctx, &csi.NodeStageVolumeRequest{ VolumeId: diskID, StagingTargetPath: "testStagingTargetPath", - VolumeCapability: &csi.VolumeCapability{}, + VolumeCapability: &csi.VolumeCapability{ + AccessType: &csi.VolumeCapability_Block{ + Block: &csi.VolumeCapability_BlockVolume{}, + }, + }, }) - require.NoError(t, err) + require.Error(t, err) // NodePublishVolume without access mode should fail _, err = nodeService.NodePublishVolume(ctx, &csi.NodePublishVolumeRequest{