Skip to content

Commit 9fe95e7

Browse files
authored
Merge pull request kubernetes#130398 from gnufied/add-progress-tracking-permission-change
Add progress tracking permission change
2 parents b8c95e1 + 94f3b55 commit 9fe95e7

File tree

19 files changed

+314
-47
lines changed

19 files changed

+314
-47
lines changed

pkg/kubelet/events/event.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ const (
6161
VolumeResizeFailed = "VolumeResizeFailed"
6262
VolumeResizeSuccess = "VolumeResizeSuccessful"
6363
FileSystemResizeFailed = "FileSystemResizeFailed"
64+
VolumePermissionChangeInProgress = "VolumePermissionChangeInProgress"
6465
FileSystemResizeSuccess = "FileSystemResizeSuccessful"
6566
FailedMapVolume = "FailedMapVolume"
6667
WarnAlreadyMountedVolume = "AlreadyMountedVolume"

pkg/volume/configmap/configmap.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterA
246246
setPerms := func(_ string) error {
247247
// This may be the first time writing and new files get created outside the timestamp subdirectory:
248248
// change the permissions on the whole volume and not only in the timestamp directory.
249-
return volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
249+
ownerShipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
250+
return ownerShipChanger.ChangePermissions()
250251
}
251252
err = writer.Write(payload, setPerms)
252253
if err != nil {

pkg/volume/csi/csi_mounter.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ func (c *csiMountMgr) SetUpAt(dir string, mounterArgs volume.MounterArgs) error
335335
// Driver doesn't support applying FSGroup. Kubelet must apply it instead.
336336

337337
// fullPluginName helps to distinguish different driver from csi plugin
338-
err := volume.SetVolumeOwnership(c, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(c.plugin, c.spec))
338+
ownershipChanger := volume.NewVolumeOwnership(c, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(c.plugin, c.spec))
339+
ownershipChanger.AddProgressNotifier(c.pod, mounterArgs.Recorder)
340+
err = ownershipChanger.ChangePermissions()
339341
if err != nil {
340342
// At this point mount operation is successful:
341343
// 1. Since volume can not be used by the pod because of invalid permissions, we must return error

pkg/volume/downwardapi/downwardapi.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ func (b *downwardAPIVolumeMounter) SetUpAt(dir string, mounterArgs volume.Mounte
217217
setPerms := func(_ string) error {
218218
// This may be the first time writing and new files get created outside the timestamp subdirectory:
219219
// change the permissions on the whole volume and not only in the timestamp directory.
220-
return volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
220+
ownershipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
221+
return ownershipChanger.ChangePermissions()
221222
}
222223
err = writer.Write(data, setPerms)
223224
if err != nil {

pkg/volume/emptydir/empty_dir.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ package emptydir
1818

1919
import (
2020
"fmt"
21-
"k8s.io/kubernetes/pkg/kubelet/util/swap"
2221
"os"
2322
"path/filepath"
2423

24+
"k8s.io/kubernetes/pkg/kubelet/util/swap"
25+
2526
"k8s.io/klog/v2"
2627
"k8s.io/mount-utils"
2728
utilstrings "k8s.io/utils/strings"
@@ -278,7 +279,8 @@ func (ed *emptyDir) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
278279
err = fmt.Errorf("unknown storage medium %q", ed.medium)
279280
}
280281

281-
volume.SetVolumeOwnership(ed, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(ed.plugin, nil))
282+
ownershipChanger := volume.NewVolumeOwnership(ed, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(ed.plugin, nil))
283+
_ = ownershipChanger.ChangePermissions()
282284

283285
// If setting up the quota fails, just log a message but don't actually error out.
284286
// We'll use the old du mechanism in this case, at least until we support

pkg/volume/fc/disk_manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ func diskSetUp(manager diskManager, b fcDiskMounter, volPath string, mounter mou
9191
}
9292

9393
if !b.readOnly {
94-
volume.SetVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
94+
ownershipChanger := volume.NewVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
95+
// TODO: Handle error returned here properly.
96+
_ = ownershipChanger.ChangePermissions()
9597
}
9698

9799
return nil

pkg/volume/flexvolume/mounter.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ func (f *flexVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs)
9595
if !f.readOnly {
9696
if f.plugin.capabilities.FSGroup {
9797
// fullPluginName helps to distinguish different driver from flex volume plugin
98-
volume.SetVolumeOwnership(f, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(f.plugin, f.spec))
98+
ownershipChanger := volume.NewVolumeOwnership(f, dir, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy, util.FSGroupCompleteHook(f.plugin, f.spec))
99+
_ = ownershipChanger.ChangePermissions()
99100
}
100101
}
101102

pkg/volume/git_repo/git_repo.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,9 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, mounterArgs volume.MounterArg
229229
return fmt.Errorf("failed to exec 'git reset --hard': %s: %v", output, err)
230230
}
231231

232-
volume.SetVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
233-
232+
ownershipChanger := volume.NewVolumeOwnership(b, dir, mounterArgs.FsGroup, nil /*fsGroupChangePolicy*/, volumeutil.FSGroupCompleteHook(b.plugin, nil))
233+
// We do not care about return value, this plugin is deprecated
234+
_ = ownershipChanger.ChangePermissions()
234235
volumeutil.SetReady(b.getMetaDir())
235236
return nil
236237
}

pkg/volume/iscsi/disk_manager.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package iscsi
1919
import (
2020
"os"
2121

22-
v1 "k8s.io/api/core/v1"
2322
"k8s.io/klog/v2"
2423
"k8s.io/mount-utils"
2524

@@ -42,7 +41,9 @@ type diskManager interface {
4241
// utility to mount a disk based filesystem
4342
// globalPDPath: global mount path like, /var/lib/kubelet/plugins/kubernetes.io/iscsi/{ifaceName}/{portal-some_iqn-lun-lun_id}
4443
// volPath: pod volume dir path like, /var/lib/kubelet/pods/{podUID}/volumes/kubernetes.io~iscsi/{volumeName}
45-
func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, fsGroup *int64, fsGroupChangePolicy *v1.PodFSGroupChangePolicy) error {
44+
func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, mounterArgs volume.MounterArgs) error {
45+
fsGroup := mounterArgs.FsGroup
46+
fsGroupChangePolicy := mounterArgs.FSGroupChangePolicy
4647
notMnt, err := mounter.IsLikelyNotMountPoint(volPath)
4748
if err != nil && !os.IsNotExist(err) {
4849
klog.Errorf("cannot validate mountpoint: %s", volPath)
@@ -96,7 +97,9 @@ func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter
9697
}
9798

9899
if !b.readOnly {
99-
volume.SetVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
100+
// This code requires larger refactor to monitor progress of ownership change
101+
ownershipChanger := volume.NewVolumeOwnership(&b, volPath, fsGroup, fsGroupChangePolicy, util.FSGroupCompleteHook(b.plugin, nil))
102+
_ = ownershipChanger.ChangePermissions()
100103
}
101104

102105
return nil

pkg/volume/iscsi/iscsi.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ func (b *iscsiDiskMounter) SetUp(mounterArgs volume.MounterArgs) error {
377377

378378
func (b *iscsiDiskMounter) SetUpAt(dir string, mounterArgs volume.MounterArgs) error {
379379
// diskSetUp checks mountpoints and prevent repeated calls
380-
err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs.FsGroup, mounterArgs.FSGroupChangePolicy)
380+
err := diskSetUp(b.manager, *b, dir, b.mounter, mounterArgs)
381381
if err != nil {
382382
klog.Errorf("iscsi: failed to setup")
383383
}

0 commit comments

Comments
 (0)