Change fsGroup to mounterArgs in volume.SetUp() to allow for future extension.

This commit is contained in:
Robert Krawitz 2018-11-19 17:17:45 -05:00 committed by Robert Krawitz
parent 472b9011d5
commit 5b97b2860d
61 changed files with 221 additions and 189 deletions

View File

@ -439,11 +439,11 @@ func (f *stubVolume) CanMount() error {
return nil return nil
} }
func (f *stubVolume) SetUp(fsGroup *int64) error { func (f *stubVolume) SetUp(mounterArgs volume.MounterArgs) error {
return nil return nil
} }
func (f *stubVolume) SetUpAt(dir string, fsGroup *int64) error { func (f *stubVolume) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
return nil return nil
} }

View File

@ -382,12 +382,12 @@ func (b *awsElasticBlockStoreMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *awsElasticBlockStoreMounter) SetUp(fsGroup *int64) error { func (b *awsElasticBlockStoreMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUpAt attaches the disk and bind mounts to the volume path. // SetUpAt attaches the disk and bind mounts to the volume path.
func (b *awsElasticBlockStoreMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *awsElasticBlockStoreMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// TODO: handle failed mounts here. // TODO: handle failed mounts here.
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("PersistentDisk set up: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("PersistentDisk set up: %s %v %v", dir, !notMnt, err)
@ -440,7 +440,7 @@ func (b *awsElasticBlockStoreMounter) SetUpAt(dir string, fsGroup *int64) error
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.V(4).Infof("Successfully mounted %s", dir) klog.V(4).Infof("Successfully mounted %s", dir)

View File

@ -136,7 +136,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
@ -367,7 +367,7 @@ func TestMountOptions(t *testing.T) {
t.Errorf("Got a nil Mounter") t.Errorf("Got a nil Mounter")
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
mountOptions := fakeMounter.MountPoints[0].Opts mountOptions := fakeMounter.MountPoints[0].Opts

View File

@ -62,15 +62,15 @@ func (m *azureDiskMounter) CanMount() error {
return nil return nil
} }
func (m *azureDiskMounter) SetUp(fsGroup *int64) error { func (m *azureDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
return m.SetUpAt(m.GetPath(), fsGroup) return m.SetUpAt(m.GetPath(), mounterArgs)
} }
func (m *azureDiskMounter) GetPath() string { func (m *azureDiskMounter) GetPath() string {
return getPath(m.dataDisk.podUID, m.dataDisk.volumeName, m.plugin.host) return getPath(m.dataDisk.podUID, m.dataDisk.volumeName, m.plugin.host)
} }
func (m *azureDiskMounter) SetUpAt(dir string, fsGroup *int64) error { func (m *azureDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
mounter := m.plugin.host.GetMounter(m.plugin.GetPluginName()) mounter := m.plugin.host.GetMounter(m.plugin.GetPluginName())
volumeSource, _, err := getVolumeSource(m.spec) volumeSource, _, err := getVolumeSource(m.spec)
@ -161,7 +161,7 @@ func (m *azureDiskMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
if volumeSource.ReadOnly == nil || !*volumeSource.ReadOnly { if volumeSource.ReadOnly == nil || !*volumeSource.ReadOnly {
volume.SetVolumeOwnership(m, fsGroup) volume.SetVolumeOwnership(m, mounterArgs.FsGroup)
} }
klog.V(2).Infof("azureDisk - successfully mounted disk %s on %s", diskName, dir) klog.V(2).Infof("azureDisk - successfully mounted disk %s on %s", diskName, dir)

View File

@ -236,11 +236,11 @@ func (b *azureFileMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *azureFileMounter) SetUp(fsGroup *int64) error { func (b *azureFileMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *azureFileMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *azureFileMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("AzureFile mount set up: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("AzureFile mount set up: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {
@ -283,7 +283,7 @@ func (b *azureFileMounter) SetUpAt(dir string, fsGroup *int64) error {
options = append(options, "ro") options = append(options, "ro")
} }
mountOptions = volutil.JoinMountOptions(b.mountOptions, options) mountOptions = volutil.JoinMountOptions(b.mountOptions, options)
mountOptions = appendDefaultMountOptions(mountOptions, fsGroup) mountOptions = appendDefaultMountOptions(mountOptions, mounterArgs.FsGroup)
} }
err = b.mounter.Mount(source, dir, "cifs", mountOptions) err = b.mounter.Mount(source, dir, "cifs", mountOptions)

View File

@ -155,7 +155,7 @@ func testPlugin(t *testing.T, tmpDir string, volumeHost volume.VolumeHost) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -222,12 +222,12 @@ func (cephfsVolume *cephfsMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (cephfsVolume *cephfsMounter) SetUp(fsGroup *int64) error { func (cephfsVolume *cephfsMounter) SetUp(mounterArgs volume.MounterArgs) error {
return cephfsVolume.SetUpAt(cephfsVolume.GetPath(), fsGroup) return cephfsVolume.SetUpAt(cephfsVolume.GetPath(), mounterArgs)
} }
// SetUpAt attaches the disk and bind mounts to the volume path. // SetUpAt attaches the disk and bind mounts to the volume path.
func (cephfsVolume *cephfsMounter) SetUpAt(dir string, fsGroup *int64) error { func (cephfsVolume *cephfsMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := cephfsVolume.mounter.IsLikelyNotMountPoint(dir) notMnt, err := cephfsVolume.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("CephFS mount set up: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("CephFS mount set up: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {

View File

@ -87,7 +87,7 @@ func TestPlugin(t *testing.T) {
if volumePath != volpath { if volumePath != volpath {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(volumePath); err != nil { if _, err := os.Stat(volumePath); err != nil {

View File

@ -377,12 +377,12 @@ func (b *cinderVolumeMounter) CanMount() error {
return nil return nil
} }
func (b *cinderVolumeMounter) SetUp(fsGroup *int64) error { func (b *cinderVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUp bind mounts to the volume path. // SetUp bind mounts to the volume path.
func (b *cinderVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *cinderVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(5).Infof("Cinder SetUp %s to %s", b.pdName, dir) klog.V(5).Infof("Cinder SetUp %s to %s", b.pdName, dir)
b.plugin.volumeLocks.LockKey(b.pdName) b.plugin.volumeLocks.LockKey(b.pdName)
@ -442,7 +442,7 @@ func (b *cinderVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.V(3).Infof("Cinder volume %s mounted to %s", b.pdName, dir) klog.V(3).Infof("Cinder volume %s mounted to %s", b.pdName, dir)

View File

@ -166,7 +166,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -183,11 +183,11 @@ func (b *configMapVolumeMounter) CanMount() error {
return nil return nil
} }
func (b *configMapVolumeMounter) SetUp(fsGroup *int64) error { func (b *configMapVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *configMapVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir) klog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir)
// Wrap EmptyDir, let it do the setup. // Wrap EmptyDir, let it do the setup.
@ -224,7 +224,7 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
setupSuccess := false setupSuccess := false
if err := wrapped.SetUpAt(dir, fsGroup); err != nil { if err := wrapped.SetUpAt(dir, mounterArgs); err != nil {
return err return err
} }
if err := volumeutil.MakeNestedMountpoints(b.volName, dir, b.pod); err != nil { if err := volumeutil.MakeNestedMountpoints(b.volName, dir, b.pod); err != nil {
@ -259,9 +259,9 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
err = volume.SetVolumeOwnership(b, fsGroup) err = volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("Error applying volume ownership settings for group: %v", fsGroup) klog.Errorf("Error applying volume ownership settings for group: %v", mounterArgs.FsGroup)
return err return err
} }
setupSuccess = true setupSuccess = true

View File

@ -365,8 +365,10 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
fsGroup := int64(1001) var mounterArgs volume.MounterArgs
err = mounter.SetUp(&fsGroup) group := int64(1001)
mounterArgs.FsGroup = &group
err = mounter.SetUp(mounterArgs)
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -423,8 +425,10 @@ func TestPluginReboot(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
fsGroup := int64(1001) var mounterArgs volume.MounterArgs
err = mounter.SetUp(&fsGroup) group := int64(1001)
mounterArgs.FsGroup = &group
err = mounter.SetUp(mounterArgs)
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -485,8 +489,10 @@ func TestPluginOptional(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
fsGroup := int64(1001) var mounterArgs volume.MounterArgs
err = mounter.SetUp(&fsGroup) group := int64(1001)
mounterArgs.FsGroup = &group
err = mounter.SetUp(mounterArgs)
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -582,8 +588,10 @@ func TestPluginKeysOptional(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
fsGroup := int64(1001) var mounterArgs volume.MounterArgs
err = mounter.SetUp(&fsGroup) group := int64(1001)
mounterArgs.FsGroup = &group
err = mounter.SetUp(mounterArgs)
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -660,8 +668,10 @@ func TestInvalidConfigMapSetup(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
fsGroup := int64(1001) var mounterArgs volume.MounterArgs
err = mounter.SetUp(&fsGroup) group := int64(1001)
mounterArgs.FsGroup = &group
err = mounter.SetUp(mounterArgs)
if err == nil { if err == nil {
t.Errorf("Expected setup to fail") t.Errorf("Expected setup to fail")
} }

View File

@ -93,11 +93,11 @@ func (c *csiMountMgr) CanMount() error {
return nil return nil
} }
func (c *csiMountMgr) SetUp(fsGroup *int64) error { func (c *csiMountMgr) SetUp(mounterArgs volume.MounterArgs) error {
return c.SetUpAt(c.GetPath(), fsGroup) return c.SetUpAt(c.GetPath(), mounterArgs)
} }
func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error { func (c *csiMountMgr) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(4).Infof(log("Mounter.SetUpAt(%s)", dir)) klog.V(4).Infof(log("Mounter.SetUpAt(%s)", dir))
mounted, err := isDirMounted(c.plugin, dir) mounted, err := isDirMounted(c.plugin, dir)
@ -268,7 +268,7 @@ func (c *csiMountMgr) SetUpAt(dir string, fsGroup *int64) error {
// if fstype is "", then skip fsgroup (could be indication of non-block filesystem) // if fstype is "", then skip fsgroup (could be indication of non-block filesystem)
// if fstype is provided and pv.AccessMode == ReadWriteOnly, then apply fsgroup // if fstype is provided and pv.AccessMode == ReadWriteOnly, then apply fsgroup
err = c.applyFSGroup(fsType, fsGroup) err = c.applyFSGroup(fsType, mounterArgs.FsGroup)
if err != nil { if err != nil {
// attempt to rollback mount. // attempt to rollback mount.
fsGrpErr := fmt.Errorf("applyFSGroup failed for vol %s: %v", c.volumeID, err) fsGrpErr := fmt.Errorf("applyFSGroup failed for vol %s: %v", c.volumeID, err)

View File

@ -203,8 +203,10 @@ func MounterSetUpTests(t *testing.T, podInfoEnabled bool) {
} }
// Mounter.SetUp() // Mounter.SetUp()
var mounterArgs volume.MounterArgs
fsGroup := int64(2000) fsGroup := int64(2000)
if err := csiMounter.SetUp(&fsGroup); err != nil { mounterArgs.FsGroup = &fsGroup
if err := csiMounter.SetUp(mounterArgs); err != nil {
t.Fatalf("mounter.Setup failed: %v", err) t.Fatalf("mounter.Setup failed: %v", err)
} }
@ -344,7 +346,7 @@ func TestMounterSetUpSimple(t *testing.T) {
} }
// Mounter.SetUp() // Mounter.SetUp()
if err := csiMounter.SetUp(nil); err != nil { if err := csiMounter.SetUp(volume.MounterArgs{}); err != nil {
t.Fatalf("mounter.Setup failed: %v", err) t.Fatalf("mounter.Setup failed: %v", err)
} }
@ -475,7 +477,7 @@ func TestMounterSetUpWithInline(t *testing.T) {
} }
// Mounter.SetUp() // Mounter.SetUp()
if err := csiMounter.SetUp(nil); err != nil { if err := csiMounter.SetUp(volume.MounterArgs{}); err != nil {
t.Fatalf("mounter.Setup failed: %v", err) t.Fatalf("mounter.Setup failed: %v", err)
} }
@ -621,12 +623,14 @@ func TestMounterSetUpWithFSGroup(t *testing.T) {
} }
// Mounter.SetUp() // Mounter.SetUp()
var mounterArgs volume.MounterArgs
var fsGroupPtr *int64 var fsGroupPtr *int64
if tc.setFsGroup { if tc.setFsGroup {
fsGroup := tc.fsGroup fsGroup := tc.fsGroup
fsGroupPtr = &fsGroup fsGroupPtr = &fsGroup
} }
if err := csiMounter.SetUp(fsGroupPtr); err != nil { mounterArgs.FsGroup = fsGroupPtr
if err := csiMounter.SetUp(mounterArgs); err != nil {
t.Fatalf("mounter.Setup failed: %v", err) t.Fatalf("mounter.Setup failed: %v", err)
} }

View File

@ -268,7 +268,9 @@ func TestCSI_VolumeAll(t *testing.T) {
csiMounter := mounter.(*csiMountMgr) csiMounter := mounter.(*csiMountMgr)
csiMounter.csiClient = csiClient csiMounter.csiClient = csiClient
if err := csiMounter.SetUp(fsGroup); err != nil { var mounterArgs volume.MounterArgs
mounterArgs.FsGroup = fsGroup
if err := csiMounter.SetUp(mounterArgs); err != nil {
t.Fatalf("csiTest.VolumeAll mounter.Setup(fsGroup) failed: %s", err) t.Fatalf("csiTest.VolumeAll mounter.Setup(fsGroup) failed: %s", err)
} }
t.Log("csiTest.VolumeAll mounter.Setup(fsGroup) done OK") t.Log("csiTest.VolumeAll mounter.Setup(fsGroup) done OK")

View File

@ -174,11 +174,11 @@ func (b *downwardAPIVolumeMounter) CanMount() error {
// This function is not idempotent by design. We want the data to be refreshed periodically. // This function is not idempotent by design. We want the data to be refreshed periodically.
// The internal sync interval of kubelet will drive the refresh of data. // The internal sync interval of kubelet will drive the refresh of data.
// TODO: Add volume specific ticker and refresh loop // TODO: Add volume specific ticker and refresh loop
func (b *downwardAPIVolumeMounter) SetUp(fsGroup *int64) error { func (b *downwardAPIVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *downwardAPIVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *downwardAPIVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(3).Infof("Setting up a downwardAPI volume %v for pod %v/%v at %v", b.volName, b.pod.Namespace, b.pod.Name, dir) klog.V(3).Infof("Setting up a downwardAPI volume %v for pod %v/%v at %v", b.volName, b.pod.Namespace, b.pod.Name, dir)
// Wrap EmptyDir. Here we rely on the idempotency of the wrapped plugin to avoid repeatedly mounting // Wrap EmptyDir. Here we rely on the idempotency of the wrapped plugin to avoid repeatedly mounting
wrapped, err := b.plugin.host.NewWrapperMounter(b.volName, wrappedVolumeSpec(), b.pod, *b.opts) wrapped, err := b.plugin.host.NewWrapperMounter(b.volName, wrappedVolumeSpec(), b.pod, *b.opts)
@ -194,7 +194,7 @@ func (b *downwardAPIVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
setupSuccess := false setupSuccess := false
if err := wrapped.SetUpAt(dir, fsGroup); err != nil { if err := wrapped.SetUpAt(dir, mounterArgs); err != nil {
klog.Errorf("Unable to setup downwardAPI volume %v for pod %v/%v: %s", b.volName, b.pod.Namespace, b.pod.Name, err.Error()) klog.Errorf("Unable to setup downwardAPI volume %v for pod %v/%v: %s", b.volName, b.pod.Namespace, b.pod.Name, err.Error())
return err return err
} }
@ -231,9 +231,9 @@ func (b *downwardAPIVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
err = volume.SetVolumeOwnership(b, fsGroup) err = volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("Error applying volume ownership settings for group: %v", fsGroup) klog.Errorf("Error applying volume ownership settings for group: %v", mounterArgs.FsGroup)
return err return err
} }

View File

@ -253,7 +253,7 @@ func newDownwardAPITest(t *testing.T, name string, volumeFiles, podLabels, podAn
volumePath := mounter.GetPath() volumePath := mounter.GetPath()
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -380,7 +380,7 @@ func (step reSetUp) run(test *downwardAPITest) {
} }
// now re-run Setup // now re-run Setup
if err = test.mounter.SetUp(nil); err != nil { if err = test.mounter.SetUp(volume.MounterArgs{}); err != nil {
test.t.Errorf("Failed to re-setup volume: %v", err) test.t.Errorf("Failed to re-setup volume: %v", err)
} }

View File

@ -193,12 +193,12 @@ func (ed *emptyDir) CanMount() error {
} }
// SetUp creates new directory. // SetUp creates new directory.
func (ed *emptyDir) SetUp(fsGroup *int64) error { func (ed *emptyDir) SetUp(mounterArgs volume.MounterArgs) error {
return ed.SetUpAt(ed.GetPath(), fsGroup) return ed.SetUpAt(ed.GetPath(), mounterArgs)
} }
// SetUpAt creates new directory. // SetUpAt creates new directory.
func (ed *emptyDir) SetUpAt(dir string, fsGroup *int64) error { func (ed *emptyDir) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := ed.mounter.IsLikelyNotMountPoint(dir) notMnt, err := ed.mounter.IsLikelyNotMountPoint(dir)
// Getting an os.IsNotExist err from is a contingency; the directory // Getting an os.IsNotExist err from is a contingency; the directory
// may not exist yet, in which case, setup should run. // may not exist yet, in which case, setup should run.
@ -229,7 +229,7 @@ func (ed *emptyDir) SetUpAt(dir string, fsGroup *int64) error {
err = fmt.Errorf("unknown storage medium %q", ed.medium) err = fmt.Errorf("unknown storage medium %q", ed.medium)
} }
volume.SetVolumeOwnership(ed, fsGroup) volume.SetVolumeOwnership(ed, mounterArgs.FsGroup)
if err == nil { if err == nil {
volumeutil.SetReady(ed.getMetaDir()) volumeutil.SetReady(ed.getMetaDir())

View File

@ -163,7 +163,7 @@ func doTestPlugin(t *testing.T, config pluginTestConfig) {
t.Errorf("Got unexpected path: %s", volPath) t.Errorf("Got unexpected path: %s", volPath)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }

View File

@ -371,13 +371,13 @@ func (b *fcDiskMounter) CanMount() error {
return nil return nil
} }
func (b *fcDiskMounter) SetUp(fsGroup *int64) error { func (b *fcDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *fcDiskMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *fcDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// diskSetUp checks mountpoints and prevent repeated calls // diskSetUp checks mountpoints and prevent repeated calls
err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("fc: failed to setup") klog.Errorf("fc: failed to setup")
} }

View File

@ -179,7 +179,7 @@ func doTestPlugin(t *testing.T, spec *volume.Spec) {
t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, path) t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -51,7 +51,7 @@ const (
optionFSType = "kubernetes.io/fsType" optionFSType = "kubernetes.io/fsType"
optionReadWrite = "kubernetes.io/readwrite" optionReadWrite = "kubernetes.io/readwrite"
optionKeySecret = "kubernetes.io/secret" optionKeySecret = "kubernetes.io/secret"
optionFSGroup = "kubernetes.io/fsGroup" optionFSGroup = "kubernetes.io/mounterArgs.FsGroup"
optionMountsDir = "kubernetes.io/mountsDir" optionMountsDir = "kubernetes.io/mountsDir"
optionPVorVolumeName = "kubernetes.io/pvOrVolumeName" optionPVorVolumeName = "kubernetes.io/pvOrVolumeName"

View File

@ -26,7 +26,7 @@ type mounterDefaults flexVolumeMounter
// SetUpAt is part of the volume.Mounter interface. // SetUpAt is part of the volume.Mounter interface.
// This implementation relies on the attacher's device mount path and does a bind mount to dir. // This implementation relies on the attacher's device mount path and does a bind mount to dir.
func (f *mounterDefaults) SetUpAt(dir string, fsGroup *int64) error { func (f *mounterDefaults) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.Warning(logPrefix(f.plugin), "using default SetUpAt to ", dir) klog.Warning(logPrefix(f.plugin), "using default SetUpAt to ", dir)
src, err := f.plugin.getDeviceMountPath(f.spec) src, err := f.plugin.getDeviceMountPath(f.spec)

View File

@ -39,12 +39,12 @@ var _ volume.Mounter = &flexVolumeMounter{}
// Mounter interface // Mounter interface
// SetUp creates new directory. // SetUp creates new directory.
func (f *flexVolumeMounter) SetUp(fsGroup *int64) error { func (f *flexVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return f.SetUpAt(f.GetPath(), fsGroup) return f.SetUpAt(f.GetPath(), mounterArgs)
} }
// SetUpAt creates new directory. // SetUpAt creates new directory.
func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (f *flexVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// Mount only once. // Mount only once.
alreadyMounted, err := prepareForMount(f.mounter, dir) alreadyMounted, err := prepareForMount(f.mounter, dir)
if err != nil { if err != nil {
@ -75,15 +75,15 @@ func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
// Implicit parameters // Implicit parameters
if fsGroup != nil { if mounterArgs.FsGroup != nil {
extraOptions[optionFSGroup] = strconv.FormatInt(int64(*fsGroup), 10) extraOptions[optionFSGroup] = strconv.FormatInt(int64(*mounterArgs.FsGroup), 10)
} }
call.AppendSpec(f.spec, f.plugin.host, extraOptions) call.AppendSpec(f.spec, f.plugin.host, extraOptions)
_, err = call.Run() _, err = call.Run()
if isCmdNotSupportedErr(err) { if isCmdNotSupportedErr(err) {
err = (*mounterDefaults)(f).SetUpAt(dir, fsGroup) err = (*mounterDefaults)(f).SetUpAt(dir, mounterArgs)
} }
if err != nil { if err != nil {
@ -93,7 +93,7 @@ func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
if !f.readOnly { if !f.readOnly {
if f.plugin.capabilities.FSGroup { if f.plugin.capabilities.FSGroup {
volume.SetVolumeOwnership(f, fsGroup) volume.SetVolumeOwnership(f, mounterArgs.FsGroup)
} }
} }

View File

@ -23,6 +23,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/test/utils/harness" "k8s.io/kubernetes/test/utils/harness"
) )
@ -46,7 +47,7 @@ func TestSetUpAt(tt *testing.T) {
plugin, rootDir := testPlugin(t) plugin, rootDir := testPlugin(t)
plugin.unsupportedCommands = []string{"unsupportedCmd"} plugin.unsupportedCommands = []string{"unsupportedCmd"}
plugin.runner = fakeRunner( plugin.runner = fakeRunner(
// first call without fsGroup // first call without mounterArgs.FsGroup
assertDriverCall(t, successOutput(), mountCmd, rootDir+"/mount-dir", assertDriverCall(t, successOutput(), mountCmd, rootDir+"/mount-dir",
specJSON(plugin, spec, map[string]string{ specJSON(plugin, spec, map[string]string{
optionKeyPodName: "my-pod", optionKeyPodName: "my-pod",
@ -55,7 +56,7 @@ func TestSetUpAt(tt *testing.T) {
optionKeyServiceAccountName: "my-sa", optionKeyServiceAccountName: "my-sa",
})), })),
// second test has fsGroup // second test has mounterArgs.FsGroup
assertDriverCall(t, notSupportedOutput(), mountCmd, rootDir+"/mount-dir", assertDriverCall(t, notSupportedOutput(), mountCmd, rootDir+"/mount-dir",
specJSON(plugin, spec, map[string]string{ specJSON(plugin, spec, map[string]string{
optionFSGroup: "42", optionFSGroup: "42",
@ -69,8 +70,10 @@ func TestSetUpAt(tt *testing.T) {
) )
m, _ := plugin.newMounterInternal(spec, pod, mounter, plugin.runner) m, _ := plugin.newMounterInternal(spec, pod, mounter, plugin.runner)
m.SetUpAt(rootDir+"/mount-dir", nil) var mounterArgs volume.MounterArgs
m.SetUpAt(rootDir+"/mount-dir", mounterArgs)
fsGroup := int64(42) group := int64(42)
m.SetUpAt(rootDir+"/mount-dir", &fsGroup) mounterArgs.FsGroup = &group
m.SetUpAt(rootDir+"/mount-dir", mounterArgs)
} }

View File

@ -235,8 +235,8 @@ func (b *flockerVolumeMounter) GetPath() string {
} }
// SetUp bind mounts the disk global mount to the volume path. // SetUp bind mounts the disk global mount to the volume path.
func (b *flockerVolumeMounter) SetUp(fsGroup *int64) error { func (b *flockerVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// newFlockerClient uses environment variables and pod attributes to return a // newFlockerClient uses environment variables and pod attributes to return a
@ -277,7 +277,7 @@ control service:
need to update the Primary UUID for this volume. need to update the Primary UUID for this volume.
5. Wait until the Primary UUID was updated or timeout. 5. Wait until the Primary UUID was updated or timeout.
*/ */
func (b *flockerVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *flockerVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
var err error var err error
if b.flockerClient == nil { if b.flockerClient == nil {
b.flockerClient, err = b.newFlockerClient() b.flockerClient, err = b.newFlockerClient()
@ -365,7 +365,7 @@ func (b *flockerVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.V(4).Infof("successfully mounted %s", dir) klog.V(4).Infof("successfully mounted %s", dir)

View File

@ -354,12 +354,12 @@ func (b *gcePersistentDiskMounter) CanMount() error {
} }
// SetUp bind mounts the disk global mount to the volume path. // SetUp bind mounts the disk global mount to the volume path.
func (b *gcePersistentDiskMounter) SetUp(fsGroup *int64) error { func (b *gcePersistentDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUp bind mounts the disk global mount to the give volume path. // SetUp bind mounts the disk global mount to the give volume path.
func (b *gcePersistentDiskMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *gcePersistentDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// TODO: handle failed mounts here. // TODO: handle failed mounts here.
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("GCE PersistentDisk set up: Dir (%s) PD name (%q) Mounted (%t) Error (%v), ReadOnly (%t)", dir, b.pdName, !notMnt, err, b.readOnly) klog.V(4).Infof("GCE PersistentDisk set up: Dir (%s) PD name (%q) Mounted (%t) Error (%v), ReadOnly (%t)", dir, b.pdName, !notMnt, err, b.readOnly)
@ -419,7 +419,7 @@ func (b *gcePersistentDiskMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.V(4).Infof("Successfully mounted %s", dir) klog.V(4).Infof("Successfully mounted %s", dir)

View File

@ -141,7 +141,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
@ -279,7 +279,7 @@ func TestMountOptions(t *testing.T) {
t.Errorf("Got a nil Mounter") t.Errorf("Got a nil Mounter")
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
mountOptions := fakeMounter.MountPoints[0].Opts mountOptions := fakeMounter.MountPoints[0].Opts

View File

@ -179,12 +179,12 @@ func (b *gitRepoVolumeMounter) CanMount() error {
} }
// SetUp creates new directory and clones a git repo. // SetUp creates new directory and clones a git repo.
func (b *gitRepoVolumeMounter) SetUp(fsGroup *int64) error { func (b *gitRepoVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUpAt creates new directory and clones a git repo. // SetUpAt creates new directory and clones a git repo.
func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *gitRepoVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
if volumeutil.IsReady(b.getMetaDir()) { if volumeutil.IsReady(b.getMetaDir()) {
return nil return nil
} }
@ -194,7 +194,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
if err != nil { if err != nil {
return err return err
} }
if err := wrapped.SetUpAt(dir, fsGroup); err != nil { if err := wrapped.SetUpAt(dir, mounterArgs); err != nil {
return err return err
} }
@ -240,7 +240,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return fmt.Errorf("failed to exec 'git reset --hard': %s: %v", output, err) return fmt.Errorf("failed to exec 'git reset --hard': %s: %v", output, err)
} }
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
volumeutil.SetReady(b.getMetaDir()) volumeutil.SetReady(b.getMetaDir())
return nil return nil

View File

@ -422,7 +422,7 @@ func doTestSetUp(scenario struct {
g := mounter.(*gitRepoVolumeMounter) g := mounter.(*gitRepoVolumeMounter)
g.exec = &fake g.exec = &fake
g.SetUp(nil) g.SetUp(volume.MounterArgs{})
if fake.CommandCalls != len(expecteds) { if fake.CommandCalls != len(expecteds) {
allErrs = append(allErrs, allErrs = append(allErrs,

View File

@ -275,11 +275,11 @@ func (b *glusterfsMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *glusterfsMounter) SetUp(fsGroup *int64) error { func (b *glusterfsMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *glusterfsMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *glusterfsMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("mount setup: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("mount setup: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {

View File

@ -118,7 +118,7 @@ func doTestPlugin(t *testing.T, spec *volume.Spec) {
if volumePath != expectedPath { if volumePath != expectedPath {
t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, volumePath) t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, volumePath)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(volumePath); err != nil { if _, err := os.Stat(volumePath); err != nil {

View File

@ -222,7 +222,7 @@ func (b *hostPathMounter) CanMount() error {
} }
// SetUp does nothing. // SetUp does nothing.
func (b *hostPathMounter) SetUp(fsGroup *int64) error { func (b *hostPathMounter) SetUp(mounterArgs volume.MounterArgs) error {
err := validation.ValidatePathNoBacksteps(b.GetPath()) err := validation.ValidatePathNoBacksteps(b.GetPath())
if err != nil { if err != nil {
return fmt.Errorf("invalid HostPath `%s`: %v", b.GetPath(), err) return fmt.Errorf("invalid HostPath `%s`: %v", b.GetPath(), err)
@ -235,7 +235,7 @@ func (b *hostPathMounter) SetUp(fsGroup *int64) error {
} }
// SetUpAt does not make sense for host paths - probably programmer error. // SetUpAt does not make sense for host paths - probably programmer error.
func (b *hostPathMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *hostPathMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
return fmt.Errorf("SetUpAt() does not make sense for host paths") return fmt.Errorf("SetUpAt() does not make sense for host paths")
} }

View File

@ -217,7 +217,7 @@ func TestInvalidHostPath(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
expectedMsg := "invalid HostPath `/no/backsteps/allowed/..`: must not contain '..'" expectedMsg := "invalid HostPath `/no/backsteps/allowed/..`: must not contain '..'"
if err.Error() != expectedMsg { if err.Error() != expectedMsg {
t.Fatalf("expected error `%s` but got `%s`", expectedMsg, err) t.Fatalf("expected error `%s` but got `%s`", expectedMsg, err)
@ -253,7 +253,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }

View File

@ -330,13 +330,13 @@ func (b *iscsiDiskMounter) CanMount() error {
return nil return nil
} }
func (b *iscsiDiskMounter) SetUp(fsGroup *int64) error { func (b *iscsiDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *iscsiDiskMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *iscsiDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// diskSetUp checks mountpoints and prevent repeated calls // diskSetUp checks mountpoints and prevent repeated calls
err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("iscsi: failed to setup") klog.Errorf("iscsi: failed to setup")
} }

View File

@ -175,7 +175,7 @@ func doTestPlugin(t *testing.T, spec *volume.Spec) {
t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, path) t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -423,12 +423,12 @@ func (m *localVolumeMounter) CanMount() error {
} }
// SetUp bind mounts the directory to the volume path // SetUp bind mounts the directory to the volume path
func (m *localVolumeMounter) SetUp(fsGroup *int64) error { func (m *localVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return m.SetUpAt(m.GetPath(), fsGroup) return m.SetUpAt(m.GetPath(), mounterArgs)
} }
// SetUpAt bind mounts the directory to the volume path and sets up volume ownership // SetUpAt bind mounts the directory to the volume path and sets up volume ownership
func (m *localVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (m *localVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
m.plugin.volumeLocks.LockKey(m.globalPath) m.plugin.volumeLocks.LockKey(m.globalPath)
defer m.plugin.volumeLocks.UnlockKey(m.globalPath) defer m.plugin.volumeLocks.UnlockKey(m.globalPath)
@ -452,7 +452,7 @@ func (m *localVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return nil return nil
} }
refs, err := m.mounter.GetMountRefs(m.globalPath) refs, err := m.mounter.GetMountRefs(m.globalPath)
if fsGroup != nil { if mounterArgs.FsGroup != nil {
if err != nil { if err != nil {
klog.Errorf("cannot collect mounting information: %s %v", m.globalPath, err) klog.Errorf("cannot collect mounting information: %s %v", m.globalPath, err)
return err return err
@ -461,7 +461,7 @@ func (m *localVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
// Only count mounts from other pods // Only count mounts from other pods
refs = m.filterPodMounts(refs) refs = m.filterPodMounts(refs)
if len(refs) > 0 { if len(refs) > 0 {
fsGroupNew := int64(*fsGroup) fsGroupNew := int64(*mounterArgs.FsGroup)
fsGroupOld, err := m.mounter.GetFSGroup(m.globalPath) fsGroupOld, err := m.mounter.GetFSGroup(m.globalPath)
if err != nil { if err != nil {
return fmt.Errorf("failed to check fsGroup for %s (%v)", m.globalPath, err) return fmt.Errorf("failed to check fsGroup for %s (%v)", m.globalPath, err)
@ -519,7 +519,7 @@ func (m *localVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
if !m.readOnly { if !m.readOnly {
// Volume owner will be written only once on the first volume mount // Volume owner will be written only once on the first volume mount
if len(refs) == 0 { if len(refs) == 0 {
return volume.SetVolumeOwnership(m, fsGroup) return volume.SetVolumeOwnership(m, mounterArgs.FsGroup)
} }
} }
return nil return nil

View File

@ -200,7 +200,7 @@ func TestInvalidLocalPath(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
expectedMsg := "invalid path: /no/backsteps/allowed/.. must not contain '..'" expectedMsg := "invalid path: /no/backsteps/allowed/.. must not contain '..'"
if err.Error() != expectedMsg { if err.Error() != expectedMsg {
t.Fatalf("expected error `%s` but got `%s`", expectedMsg, err) t.Fatalf("expected error `%s` but got `%s`", expectedMsg, err)
@ -307,7 +307,7 @@ func TestMountUnmount(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
@ -412,7 +412,9 @@ func testFSGroupMount(plug volume.VolumePlugin, pod *v1.Pod, tmpDir string, fsGr
return fmt.Errorf("Got unexpected path: %s", path) return fmt.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(&fsGroup); err != nil { var mounterArgs volume.MounterArgs
mounterArgs.FsGroup = &fsGroup
if err := mounter.SetUp(mounterArgs); err != nil {
return err return err
} }
return nil return nil
@ -517,7 +519,7 @@ func TestMountOptions(t *testing.T) {
fakeMounter := &mount.FakeMounter{} fakeMounter := &mount.FakeMounter{}
mounter.(*localVolumeMounter).mounter = fakeMounter mounter.(*localVolumeMounter).mounter = fakeMounter
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
mountOptions := fakeMounter.MountPoints[0].Opts mountOptions := fakeMounter.MountPoints[0].Opts

View File

@ -233,11 +233,11 @@ func (nfsMounter *nfsMounter) GetAttributes() volume.Attributes {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (nfsMounter *nfsMounter) SetUp(fsGroup *int64) error { func (nfsMounter *nfsMounter) SetUp(mounterArgs volume.MounterArgs) error {
return nfsMounter.SetUpAt(nfsMounter.GetPath(), fsGroup) return nfsMounter.SetUpAt(nfsMounter.GetPath(), mounterArgs)
} }
func (nfsMounter *nfsMounter) SetUpAt(dir string, fsGroup *int64) error { func (nfsMounter *nfsMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := mount.IsNotMountPoint(nfsMounter.mounter, dir) notMnt, err := mount.IsNotMountPoint(nfsMounter.mounter, dir)
klog.V(4).Infof("NFS mount set up: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("NFS mount set up: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {

View File

@ -122,7 +122,7 @@ func doTestPlugin(t *testing.T, spec *volume.Spec) {
if volumePath != expectedPath { if volumePath != expectedPath {
t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, volumePath) t.Errorf("Unexpected path, expected %q, got: %q", expectedPath, volumePath)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(volumePath); err != nil { if _, err := os.Stat(volumePath); err != nil {

View File

@ -200,12 +200,12 @@ func (b *photonPersistentDiskMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *photonPersistentDiskMounter) SetUp(fsGroup *int64) error { func (b *photonPersistentDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *photonPersistentDiskMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *photonPersistentDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(4).Infof("Photon Persistent Disk setup %s to %s", b.pdID, dir) klog.V(4).Infof("Photon Persistent Disk setup %s to %s", b.pdID, dir)
// TODO: handle failed mounts here. // TODO: handle failed mounts here.

View File

@ -128,7 +128,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -298,12 +298,12 @@ func (b *portworxVolumeMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *portworxVolumeMounter) SetUp(fsGroup *int64) error { func (b *portworxVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUpAt attaches the disk and bind mounts to the volume path. // SetUpAt attaches the disk and bind mounts to the volume path.
func (b *portworxVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *portworxVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.Infof("Portworx Volume set up. Dir: %s %v %v", dir, !notMnt, err) klog.Infof("Portworx Volume set up. Dir: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {
@ -331,7 +331,7 @@ func (b *portworxVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.Infof("Portworx Volume %s setup at %s", b.volumeID, dir) klog.Infof("Portworx Volume %s setup at %s", b.volumeID, dir)
return nil return nil

View File

@ -163,7 +163,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -188,11 +188,11 @@ func (s *projectedVolumeMounter) CanMount() error {
return nil return nil
} }
func (s *projectedVolumeMounter) SetUp(fsGroup *int64) error { func (s *projectedVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return s.SetUpAt(s.GetPath(), fsGroup) return s.SetUpAt(s.GetPath(), mounterArgs)
} }
func (s *projectedVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (s *projectedVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(3).Infof("Setting up volume %v for pod %v at %v", s.volName, s.pod.UID, dir) klog.V(3).Infof("Setting up volume %v for pod %v at %v", s.volName, s.pod.UID, dir)
wrapped, err := s.plugin.host.NewWrapperMounter(s.volName, wrappedVolumeSpec(), s.pod, *s.opts) wrapped, err := s.plugin.host.NewWrapperMounter(s.volName, wrappedVolumeSpec(), s.pod, *s.opts)
@ -207,7 +207,7 @@ func (s *projectedVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
setupSuccess := false setupSuccess := false
if err := wrapped.SetUpAt(dir, fsGroup); err != nil { if err := wrapped.SetUpAt(dir, mounterArgs); err != nil {
return err return err
} }
@ -243,9 +243,9 @@ func (s *projectedVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
err = volume.SetVolumeOwnership(s, fsGroup) err = volume.SetVolumeOwnership(s, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("Error applying volume ownership settings for group: %v", fsGroup) klog.Errorf("Error applying volume ownership settings for group: %v", mounterArgs.FsGroup)
return err return err
} }
setupSuccess = true setupSuccess = true

View File

@ -878,7 +878,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -943,7 +943,8 @@ func TestInvalidPathProjected(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) var mounterArgs volume.MounterArgs
err = mounter.SetUp(mounterArgs)
if err == nil { if err == nil {
t.Errorf("Expected error while setting up secret") t.Errorf("Expected error while setting up secret")
} }
@ -994,7 +995,7 @@ func TestPluginReboot(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -1046,7 +1047,7 @@ func TestPluginOptional(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -1144,7 +1145,7 @@ func TestPluginOptionalKeys(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }

View File

@ -237,12 +237,12 @@ func (mounter *quobyteMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (mounter *quobyteMounter) SetUp(fsGroup *int64) error { func (mounter *quobyteMounter) SetUp(mounterArgs volume.MounterArgs) error {
pluginDir := mounter.plugin.host.GetPluginDir(utilstrings.EscapeQualifiedName(quobytePluginName)) pluginDir := mounter.plugin.host.GetPluginDir(utilstrings.EscapeQualifiedName(quobytePluginName))
return mounter.SetUpAt(pluginDir, fsGroup) return mounter.SetUpAt(pluginDir, mounterArgs)
} }
func (mounter *quobyteMounter) SetUpAt(dir string, fsGroup *int64) error { func (mounter *quobyteMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// Check if Quobyte is already mounted on the host in the Plugin Dir // Check if Quobyte is already mounted on the host in the Plugin Dir
// if so we can use this mountpoint instead of creating a new one // if so we can use this mountpoint instead of creating a new one
// IsLikelyNotMountPoint wouldn't check the mount type // IsLikelyNotMountPoint wouldn't check the mount type

View File

@ -101,7 +101,7 @@ func doTestPlugin(t *testing.T, spec *volume.Spec) {
if volumePath != fmt.Sprintf("%s/plugins/kubernetes.io~quobyte/root#root@vol", tmpDir) { if volumePath != fmt.Sprintf("%s/plugins/kubernetes.io~quobyte/root#root@vol", tmpDir) {
t.Errorf("Got unexpected path: %s expected: %s", volumePath, fmt.Sprintf("%s/plugins/kubernetes.io~quobyte/root#root@vol", tmpDir)) t.Errorf("Got unexpected path: %s expected: %s", volumePath, fmt.Sprintf("%s/plugins/kubernetes.io~quobyte/root#root@vol", tmpDir))
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
unmounter, err := plug.(*quobytePlugin).newUnmounterInternal("vol", types.UID("poduid"), &mount.FakeMounter{}) unmounter, err := plug.(*quobytePlugin).newUnmounterInternal("vol", types.UID("poduid"), &mount.FakeMounter{})

View File

@ -825,14 +825,14 @@ func (b *rbdMounter) CanMount() error {
return nil return nil
} }
func (b *rbdMounter) SetUp(fsGroup *int64) error { func (b *rbdMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *rbdMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *rbdMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
// diskSetUp checks mountpoints and prevent repeated calls // diskSetUp checks mountpoints and prevent repeated calls
klog.V(4).Infof("rbd: attempting to setup at %s", dir) klog.V(4).Infof("rbd: attempting to setup at %s", dir)
err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("rbd: failed to setup at %s %v", dir, err) klog.Errorf("rbd: failed to setup at %s %v", dir, err)
} }

View File

@ -305,7 +305,7 @@ func doTestPlugin(t *testing.T, c *testcase) {
t.Errorf("Unexpected path, expected %q, got: %q", c.expectedPodMountPath, path) t.Errorf("Unexpected path, expected %q, got: %q", c.expectedPodMountPath, path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {

View File

@ -77,12 +77,12 @@ func (v *sioVolume) CanMount() error {
return nil return nil
} }
func (v *sioVolume) SetUp(fsGroup *int64) error { func (v *sioVolume) SetUp(mounterArgs volume.MounterArgs) error {
return v.SetUpAt(v.GetPath(), fsGroup) return v.SetUpAt(v.GetPath(), mounterArgs)
} }
// SetUp bind mounts the disk global mount to the volume path. // SetUp bind mounts the disk global mount to the volume path.
func (v *sioVolume) SetUpAt(dir string, fsGroup *int64) error { func (v *sioVolume) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
v.plugin.volumeMtx.LockKey(v.volSpecName) v.plugin.volumeMtx.LockKey(v.volSpecName)
defer v.plugin.volumeMtx.UnlockKey(v.volSpecName) defer v.plugin.volumeMtx.UnlockKey(v.volSpecName)
@ -154,9 +154,9 @@ func (v *sioVolume) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
if !v.readOnly && fsGroup != nil { if !v.readOnly && mounterArgs.FsGroup != nil {
klog.V(4).Info(log("applying value FSGroup ownership")) klog.V(4).Info(log("applying value FSGroup ownership"))
volume.SetVolumeOwnership(v, fsGroup) volume.SetVolumeOwnership(v, mounterArgs.FsGroup)
} }
klog.V(4).Info(log("successfully setup PV %s: volume %s mapped as %s mounted at %s", v.volSpecName, v.volName, devicePath, dir)) klog.V(4).Info(log("successfully setup PV %s: volume %s mapped as %s mounted at %s", v.volSpecName, v.volName, devicePath, dir))

View File

@ -191,7 +191,7 @@ func TestVolumeMounterUnmounter(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := sioMounter.SetUp(nil); err != nil { if err := sioMounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
@ -345,7 +345,7 @@ func TestVolumeProvisioner(t *testing.T) {
t.Fatalf("failed to create sio mgr: %v", err) t.Fatalf("failed to create sio mgr: %v", err)
} }
sioVol.sioMgr.client = sio sioVol.sioMgr.client = sio
if err := sioMounter.SetUp(nil); err != nil { if err := sioMounter.SetUp(volume.MounterArgs{}); err != nil {
t.Fatalf("Expected success, got: %v", err) t.Fatalf("Expected success, got: %v", err)
} }

View File

@ -178,11 +178,11 @@ func (b *secretVolumeMounter) CanMount() error {
return nil return nil
} }
func (b *secretVolumeMounter) SetUp(fsGroup *int64) error { func (b *secretVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *secretVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir) klog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir)
// Wrap EmptyDir, let it do the setup. // Wrap EmptyDir, let it do the setup.
@ -219,7 +219,7 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
setupSuccess := false setupSuccess := false
if err := wrapped.SetUpAt(dir, fsGroup); err != nil { if err := wrapped.SetUpAt(dir, mounterArgs); err != nil {
return err return err
} }
if err := volumeutil.MakeNestedMountpoints(b.volName, dir, b.pod); err != nil { if err := volumeutil.MakeNestedMountpoints(b.volName, dir, b.pod); err != nil {
@ -254,9 +254,9 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err return err
} }
err = volume.SetVolumeOwnership(b, fsGroup) err = volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
if err != nil { if err != nil {
klog.Errorf("Error applying volume ownership settings for group: %v", fsGroup) klog.Errorf("Error applying volume ownership settings for group: %v", mounterArgs.FsGroup)
return err return err
} }
setupSuccess = true setupSuccess = true

View File

@ -327,7 +327,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -401,7 +401,8 @@ func TestInvalidPathSecret(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) var mounterArgs volume.MounterArgs
err = mounter.SetUp(mounterArgs)
if err == nil { if err == nil {
t.Errorf("Expected error while setting up secret") t.Errorf("Expected error while setting up secret")
} }
@ -452,7 +453,7 @@ func TestPluginReboot(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -504,7 +505,7 @@ func TestPluginOptional(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }
@ -602,7 +603,7 @@ func TestPluginOptionalKeys(t *testing.T) {
t.Errorf("Got unexpected path: %s", volumePath) t.Errorf("Got unexpected path: %s", volumePath)
} }
err = mounter.SetUp(nil) err = mounter.SetUp(volume.MounterArgs{})
if err != nil { if err != nil {
t.Errorf("Failed to setup volume: %v", err) t.Errorf("Failed to setup volume: %v", err)
} }

View File

@ -345,7 +345,7 @@ func (b *storageosMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *storageosMounter) SetUp(fsGroup *int64) error { func (b *storageosMounter) SetUp(mounterArgs volume.MounterArgs) error {
// Need a namespace to find the volume, try pod's namespace if not set. // Need a namespace to find the volume, try pod's namespace if not set.
if b.volNamespace == "" { if b.volNamespace == "" {
klog.V(2).Infof("Setting StorageOS volume namespace to pod namespace: %s", b.podNamespace) klog.V(2).Infof("Setting StorageOS volume namespace to pod namespace: %s", b.podNamespace)
@ -375,11 +375,11 @@ func (b *storageosMounter) SetUp(fsGroup *int64) error {
klog.V(4).Infof("Successfully mounted StorageOS volume %s into global mount directory", b.volName) klog.V(4).Infof("Successfully mounted StorageOS volume %s into global mount directory", b.volName)
// Bind mount the volume into the pod // Bind mount the volume into the pod
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// SetUp bind mounts the disk global mount to the give volume path. // SetUp bind mounts the disk global mount to the give volume path.
func (b *storageosMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *storageosMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) notMnt, err := b.mounter.IsLikelyNotMountPoint(dir)
klog.V(4).Infof("StorageOS volume set up: %s %v %v", dir, !notMnt, err) klog.V(4).Infof("StorageOS volume set up: %s %v %v", dir, !notMnt, err)
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {
@ -433,7 +433,7 @@ func (b *storageosMounter) SetUpAt(dir string, fsGroup *int64) error {
} }
if !b.readOnly { if !b.readOnly {
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
} }
klog.V(4).Infof("StorageOS volume setup complete on %s", dir) klog.V(4).Infof("StorageOS volume setup complete on %s", dir)
return nil return nil

View File

@ -208,7 +208,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Expected path: '%s' got: '%s'", expectedPath, volPath) t.Errorf("Expected path: '%s' got: '%s'", expectedPath, volPath)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }
if _, err := os.Stat(volPath); err != nil { if _, err := os.Stat(volPath); err != nil {

View File

@ -765,11 +765,11 @@ func (fv *FakeVolume) CanMount() error {
return nil return nil
} }
func (fv *FakeVolume) SetUp(fsGroup *int64) error { func (fv *FakeVolume) SetUp(mounterArgs MounterArgs) error {
fv.Lock() fv.Lock()
defer fv.Unlock() defer fv.Unlock()
fv.SetUpCallCount++ fv.SetUpCallCount++
return fv.SetUpAt(fv.getPath(), fsGroup) return fv.SetUpAt(fv.getPath(), mounterArgs)
} }
func (fv *FakeVolume) GetSetUpCallCount() int { func (fv *FakeVolume) GetSetUpCallCount() int {
@ -778,7 +778,7 @@ func (fv *FakeVolume) GetSetUpCallCount() int {
return fv.SetUpCallCount return fv.SetUpCallCount
} }
func (fv *FakeVolume) SetUpAt(dir string, fsGroup *int64) error { func (fv *FakeVolume) SetUpAt(dir string, mounterArgs MounterArgs) error {
return os.MkdirAll(dir, 0750) return os.MkdirAll(dir, 0750)
} }

View File

@ -701,7 +701,10 @@ func (og *operationGenerator) GenerateMountVolumeFunc(
} }
// Execute mount // Execute mount
mountErr := volumeMounter.SetUp(fsGroup) mountErr := volumeMounter.SetUp(volume.MounterArgs{
FsGroup: fsGroup,
PodUID: string(volumeToMount.Pod.UID),
})
if mountErr != nil { if mountErr != nil {
// On failure, return error. Caller will log and retry. // On failure, return error. Caller will log and retry.
return volumeToMount.GenerateError("MountVolume.SetUp failed", mountErr) return volumeToMount.GenerateError("MountVolume.SetUp failed", mountErr)

View File

@ -101,6 +101,12 @@ type Attributes struct {
SupportsSELinux bool SupportsSELinux bool
} }
// MounterArgs provides more easily extensible arguments to Mounter
type MounterArgs struct {
FsGroup *int64
PodUID string
}
// Mounter interface provides methods to set up/mount the volume. // Mounter interface provides methods to set up/mount the volume.
type Mounter interface { type Mounter interface {
// Uses Interface to provide the path for Docker binds. // Uses Interface to provide the path for Docker binds.
@ -122,14 +128,14 @@ type Mounter interface {
// content should be owned by 'fsGroup' so that it can be // content should be owned by 'fsGroup' so that it can be
// accessed by the pod. This may be called more than once, so // accessed by the pod. This may be called more than once, so
// implementations must be idempotent. // implementations must be idempotent.
SetUp(fsGroup *int64) error SetUp(mounterArgs MounterArgs) error
// SetUpAt prepares and mounts/unpacks the volume to the // SetUpAt prepares and mounts/unpacks the volume to the
// specified directory path, which may or may not exist yet. // specified directory path, which may or may not exist yet.
// The mount point and its content should be owned by // The mount point and its content should be owned by
// 'fsGroup' so that it can be accessed by the pod. This may // 'fsGroup' so that it can be accessed by the pod. This may
// be called more than once, so implementations must be // be called more than once, so implementations must be
// idempotent. // idempotent.
SetUpAt(dir string, fsGroup *int64) error SetUpAt(dir string, mounterArgs MounterArgs) error
// GetAttributes returns the attributes of the mounter. // GetAttributes returns the attributes of the mounter.
// This function is called after SetUp()/SetUpAt(). // This function is called after SetUp()/SetUpAt().
GetAttributes() Attributes GetAttributes() Attributes

View File

@ -208,8 +208,8 @@ func (b *vsphereVolumeMounter) GetAttributes() volume.Attributes {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *vsphereVolumeMounter) SetUp(fsGroup *int64) error { func (b *vsphereVolumeMounter) SetUp(mounterArgs volume.MounterArgs) error {
return b.SetUpAt(b.GetPath(), fsGroup) return b.SetUpAt(b.GetPath(), mounterArgs)
} }
// Checks prior to mount operations to verify that the required components (binaries, etc.) // Checks prior to mount operations to verify that the required components (binaries, etc.)
@ -220,7 +220,7 @@ func (b *vsphereVolumeMounter) CanMount() error {
} }
// SetUp attaches the disk and bind mounts to the volume path. // SetUp attaches the disk and bind mounts to the volume path.
func (b *vsphereVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { func (b *vsphereVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
klog.V(5).Infof("vSphere volume setup %s to %s", b.volPath, dir) klog.V(5).Infof("vSphere volume setup %s to %s", b.volPath, dir)
// TODO: handle failed mounts here. // TODO: handle failed mounts here.
@ -269,7 +269,7 @@ func (b *vsphereVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
os.Remove(dir) os.Remove(dir)
return err return err
} }
volume.SetVolumeOwnership(b, fsGroup) volume.SetVolumeOwnership(b, mounterArgs.FsGroup)
klog.V(3).Infof("vSphere volume %s mounted to %s", b.volPath, dir) klog.V(3).Infof("vSphere volume %s mounted to %s", b.volPath, dir)
return nil return nil

View File

@ -123,7 +123,7 @@ func TestPlugin(t *testing.T) {
t.Errorf("Got unexpected path: %s", path) t.Errorf("Got unexpected path: %s", path)
} }
if err := mounter.SetUp(nil); err != nil { if err := mounter.SetUp(volume.MounterArgs{}); err != nil {
t.Errorf("Expected success, got: %v", err) t.Errorf("Expected success, got: %v", err)
} }