diff --git a/pkg/volume/csi/csi_block.go b/pkg/volume/csi/csi_block.go index 6be3ec24947..389b80a443d 100644 --- a/pkg/volume/csi/csi_block.go +++ b/pkg/volume/csi/csi_block.go @@ -276,6 +276,7 @@ func (m *csiBlockMapper) MapDevice(devicePath, globalMapPath, volumeMapPath, vol csiSource.VolumeAttributes, nodePublishSecrets, fsTypeBlockName, + []string{}, ) if err != nil { diff --git a/pkg/volume/csi/csi_client.go b/pkg/volume/csi/csi_client.go index 36055db9aa9..96fe7b81497 100644 --- a/pkg/volume/csi/csi_client.go +++ b/pkg/volume/csi/csi_client.go @@ -48,6 +48,7 @@ type csiClient interface { volumeAttribs map[string]string, nodePublishSecrets map[string]string, fsType string, + mountOptions []string, ) error NodeUnpublishVolume( ctx context.Context, @@ -113,6 +114,7 @@ func (c *csiDriverClient) NodePublishVolume( volumeAttribs map[string]string, nodePublishSecrets map[string]string, fsType string, + mountOptions []string, ) error { glog.V(4).Info(log("calling NodePublishVolume rpc [volid=%s,target_path=%s]", volID, targetPath)) if volID == "" { @@ -153,7 +155,8 @@ func (c *csiDriverClient) NodePublishVolume( } else { req.VolumeCapability.AccessType = &csipb.VolumeCapability_Mount{ Mount: &csipb.VolumeCapability_MountVolume{ - FsType: fsType, + FsType: fsType, + MountFlags: mountOptions, }, } } diff --git a/pkg/volume/csi/csi_client_test.go b/pkg/volume/csi/csi_client_test.go index 026aa368837..5ee1fc98016 100644 --- a/pkg/volume/csi/csi_client_test.go +++ b/pkg/volume/csi/csi_client_test.go @@ -59,6 +59,7 @@ func (c *fakeCsiDriverClient) NodePublishVolume( volumeAttribs map[string]string, nodePublishSecrets map[string]string, fsType string, + mountOptions []string, ) error { c.t.Log("calling fake.NodePublishVolume...") req := &csipb.NodePublishVolumeRequest{ @@ -74,7 +75,8 @@ func (c *fakeCsiDriverClient) NodePublishVolume( }, AccessType: &csipb.VolumeCapability_Mount{ Mount: &csipb.VolumeCapability_MountVolume{ - FsType: fsType, + FsType: fsType, + MountFlags: mountOptions, }, }, }, @@ -237,6 +239,7 @@ func TestClientNodePublishVolume(t *testing.T) { map[string]string{"attr0": "val0"}, map[string]string{}, tc.fsType, + []string{}, ) if tc.mustFail && err == nil { diff --git a/pkg/volume/csi/csi_mounter.go b/pkg/volume/csi/csi_mounter.go index 28c0d9a93f0..dfc9cd4a86d 100644 --- a/pkg/volume/csi/csi_mounter.go +++ b/pkg/volume/csi/csi_mounter.go @@ -195,6 +195,7 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { attribs, nodePublishSecrets, fsType, + c.spec.PersistentVolume.Spec.MountOptions, ) if err != nil { diff --git a/pkg/volume/csi/csi_plugin.go b/pkg/volume/csi/csi_plugin.go index a9083e53594..7b2d79271c2 100644 --- a/pkg/volume/csi/csi_plugin.go +++ b/pkg/volume/csi/csi_plugin.go @@ -333,7 +333,10 @@ func (p *csiPlugin) ConstructVolumeSpec(volumeName, mountPath string) (*volume.S func (p *csiPlugin) SupportsMountOption() bool { // TODO (vladimirvivien) use CSI VolumeCapability.MountVolume.mount_flags // to probe for the result for this method - return false + // (bswartz) Until the CSI spec supports probing, our only option is to + // make plugins register their support for mount options or lack thereof + // directly with kubernetes. + return true } func (p *csiPlugin) SupportsBulkVolumeVerification() bool {