diff --git a/cloud/blockstore/tools/csi_driver/internal/driver/node.go b/cloud/blockstore/tools/csi_driver/internal/driver/node.go index 237e0fe5a0..7805e82a5b 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 1e0ffbc2a1..9a88cef347 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{