mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-16 07:13:53 +00:00
Merge pull request #122877 from kinvolk/rata/userns
kubelet/userns: Wrap error message
This commit is contained in:
commit
99a15e0480
@ -96,7 +96,7 @@ func (m *UsernsManager) writeMappingsToFile(pod types.UID, userNs userNamespace)
|
|||||||
|
|
||||||
fstore, err := utilstore.NewFileStore(dir, &utilfs.DefaultFs{})
|
fstore, err := utilstore.NewFileStore(dir, &utilfs.DefaultFs{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("create user namespace store: %w", err)
|
||||||
}
|
}
|
||||||
if err := fstore.Write(mappingsFile, data); err != nil {
|
if err := fstore.Write(mappingsFile, data); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -123,7 +123,7 @@ func (m *UsernsManager) readMappingsFromFile(pod types.UID) ([]byte, error) {
|
|||||||
dir := m.kl.GetPodDir(pod)
|
dir := m.kl.GetPodDir(pod)
|
||||||
fstore, err := utilstore.NewFileStore(dir, &utilfs.DefaultFs{})
|
fstore, err := utilstore.NewFileStore(dir, &utilfs.DefaultFs{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("create user namespace store: %w", err)
|
||||||
}
|
}
|
||||||
return fstore.Read(mappingsFile)
|
return fstore.Read(mappingsFile)
|
||||||
}
|
}
|
||||||
@ -151,13 +151,13 @@ func MakeUserNsManager(kl userNsPodsManager) (*UsernsManager, error) {
|
|||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return &m, nil
|
return &m, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("user namespace manager can't read pods from disk: %w", err)
|
return nil, fmt.Errorf("read pods from disk: %w", err)
|
||||||
|
|
||||||
}
|
}
|
||||||
for _, podUID := range found {
|
for _, podUID := range found {
|
||||||
klog.V(5).InfoS("reading pod from disk for user namespace", "podUID", podUID)
|
klog.V(5).InfoS("reading pod from disk for user namespace", "podUID", podUID)
|
||||||
if err := m.recordPodMappings(podUID); err != nil {
|
if err := m.recordPodMappings(podUID); err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("record pod mappings: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +308,7 @@ func (m *UsernsManager) releaseWithLock(pod types.UID) {
|
|||||||
|
|
||||||
func (m *UsernsManager) parseUserNsFileAndRecord(pod types.UID, content []byte) (userNs userNamespace, err error) {
|
func (m *UsernsManager) parseUserNsFileAndRecord(pod types.UID, content []byte) (userNs userNamespace, err error) {
|
||||||
if err = json.Unmarshal([]byte(content), &userNs); err != nil {
|
if err = json.Unmarshal([]byte(content), &userNs); err != nil {
|
||||||
err = fmt.Errorf("can't parse file: %w", err)
|
err = fmt.Errorf("invalid user namespace mappings file: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ package userns
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -297,6 +298,7 @@ func TestCleanupOrphanedPodUsernsAllocations(t *testing.T) {
|
|||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
testUserNsPodsManager := &testUserNsPodsManager{
|
testUserNsPodsManager := &testUserNsPodsManager{
|
||||||
|
podDir: t.TempDir(),
|
||||||
podList: tc.listPods,
|
podList: tc.listPods,
|
||||||
}
|
}
|
||||||
m, err := MakeUserNsManager(testUserNsPodsManager)
|
m, err := MakeUserNsManager(testUserNsPodsManager)
|
||||||
@ -359,3 +361,38 @@ func TestRecordMaxPods(t *testing.T) {
|
|||||||
err = m.record(types.UID(fmt.Sprintf("%d", maxPods+1)), uint32((maxPods+1)*65536), 65536)
|
err = m.record(types.UID(fmt.Sprintf("%d", maxPods+1)), uint32((maxPods+1)*65536), 65536)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type failingUserNsPodsManager struct {
|
||||||
|
testUserNsPodsManager
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *failingUserNsPodsManager) ListPodsFromDisk() ([]types.UID, error) {
|
||||||
|
return nil, os.ErrPermission
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMakeUserNsManagerFailsListPod(t *testing.T) {
|
||||||
|
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, pkgfeatures.UserNamespacesSupport, true)()
|
||||||
|
|
||||||
|
testUserNsPodsManager := &failingUserNsPodsManager{}
|
||||||
|
_, err := MakeUserNsManager(testUserNsPodsManager)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.ErrorContains(t, err, "read pods from disk")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMakeUserNsManagerFailsPodRecord(t *testing.T) {
|
||||||
|
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, pkgfeatures.UserNamespacesSupport, true)()
|
||||||
|
|
||||||
|
testUserNsPodsManager := &testUserNsPodsManager{
|
||||||
|
podList: []types.UID{"pod-1", "pod-2"},
|
||||||
|
podDir: t.TempDir(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove read/execute permissions from this directory.
|
||||||
|
if err := os.Chmod(testUserNsPodsManager.podDir, 0222); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := MakeUserNsManager(testUserNsPodsManager)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.ErrorContains(t, err, "record pod mappings")
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user