diff --git a/pkg/blob/nodeserver.go b/pkg/blob/nodeserver.go index 8e349f25f..90c431d95 100644 --- a/pkg/blob/nodeserver.go +++ b/pkg/blob/nodeserver.go @@ -389,8 +389,12 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe } if performChmodOp { - if err := chmodIfPermissionMismatch(targetPath, os.FileMode(mountPermissions)); err != nil { - return nil, status.Error(codes.Internal, err.Error()) + if !isReadOnlyFromCapability(volumeCapability) { + if err := chmodIfPermissionMismatch(targetPath, os.FileMode(mountPermissions)); err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + } else { + klog.V(2).Infof("skip chmod on targetPath(%s) since it's a read-only mount", targetPath) } } else { klog.V(2).Infof("skip chmod on targetPath(%s) since mountPermissions is set as 0", targetPath) diff --git a/test/e2e/dynamic_provisioning_test.go b/test/e2e/dynamic_provisioning_test.go index 3e1b2d804..40543cdd8 100644 --- a/test/e2e/dynamic_provisioning_test.go +++ b/test/e2e/dynamic_provisioning_test.go @@ -269,6 +269,7 @@ var _ = ginkgo.Describe("[blob-csi-e2e] Dynamic Provisioning", func() { VolumeMount: testsuites.VolumeMountDetails{ NameGenerate: "test-volume-", MountPathGenerate: "/mnt/test-", + ReadOnly: true, }, AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadOnlyMany}, },