Add feature gate drop logic for emptyDir mode

This commit is contained in:
nispriha
2026-07-15 14:25:00 +05:30
parent 7077c3ad41
commit af84bbfc3d
2 changed files with 121 additions and 0 deletions

View File

@@ -799,6 +799,14 @@ func dropDisabledFields(
}
}
if !utilfeature.DefaultFeatureGate.Enabled(features.EmptyDirVolumeMode) && !emptyDirVolumeModeInUse(oldPodSpec) {
for i := range podSpec.Volumes {
if podSpec.Volumes[i].EmptyDir != nil {
podSpec.Volumes[i].EmptyDir.Mode = nil
}
}
}
if !utilfeature.DefaultFeatureGate.Enabled(features.HostnameOverride) && !setHostnameOverrideInUse(oldPodSpec) {
// Set HostnameOverride to nil only if feature is disabled and it is not used
podSpec.HostnameOverride = nil
@@ -1532,6 +1540,18 @@ func rroInUse(podSpec *api.PodSpec) bool {
return inUse
}
func emptyDirVolumeModeInUse(podSpec *api.PodSpec) bool {
if podSpec == nil {
return false
}
for _, vol := range podSpec.Volumes {
if vol.EmptyDir != nil && vol.EmptyDir.Mode != nil {
return true
}
}
return false
}
func dropDisabledClusterTrustBundleProjection(podSpec, oldPodSpec *api.PodSpec) {
if utilfeature.DefaultFeatureGate.Enabled(features.ClusterTrustBundleProjection) {
return

View File

@@ -5394,6 +5394,107 @@ func TestDropHostnameOverride(t *testing.T) {
}
}
func TestDropEmptyDirVolumeMode(t *testing.T) {
mode := int32(0o755)
podWithMode := func() *api.Pod {
return &api.Pod{
Spec: api.PodSpec{
Volumes: []api.Volume{
{
Name: "vol",
VolumeSource: api.VolumeSource{
EmptyDir: &api.EmptyDirVolumeSource{Mode: &mode},
},
},
},
},
}
}
podWithoutMode := func() *api.Pod {
return &api.Pod{
Spec: api.PodSpec{
Volumes: []api.Volume{
{
Name: "vol",
VolumeSource: api.VolumeSource{
EmptyDir: &api.EmptyDirVolumeSource{},
},
},
},
},
}
}
oldPodInfo := []struct {
description string
hasMode bool
pod func() *api.Pod
}{
{
description: "old pod with mode",
hasMode: true,
pod: podWithMode,
},
{
description: "old pod without mode",
hasMode: false,
pod: podWithoutMode,
},
}
newPodInfo := []struct {
description string
hasMode bool
pod func() *api.Pod
}{
{
description: "new pod with mode",
hasMode: true,
pod: podWithMode,
},
{
description: "new pod without mode",
hasMode: false,
pod: podWithoutMode,
},
}
for _, enabled := range []bool{true, false} {
for _, oldPodInfo := range oldPodInfo {
for _, newPodInfo := range newPodInfo {
oldPodHasMode, oldPod := oldPodInfo.hasMode, oldPodInfo.pod()
newPodHasMode, newPod := newPodInfo.hasMode, newPodInfo.pod()
t.Run(fmt.Sprintf("feature enabled=%v, old pod %v, new pod %v", enabled, oldPodInfo.description, newPodInfo.description), func(t *testing.T) {
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.EmptyDirVolumeMode, enabled)
DropDisabledPodFields(newPod, oldPod)
if !reflect.DeepEqual(oldPod, oldPodInfo.pod()) {
t.Errorf("old pod changed: %v", cmp.Diff(oldPod, oldPodInfo.pod()))
}
switch {
case enabled || oldPodHasMode:
if !reflect.DeepEqual(newPod, newPodInfo.pod()) {
t.Errorf("new pod changed: %v", cmp.Diff(newPod, newPodInfo.pod()))
}
case newPodHasMode:
if exp := podWithoutMode(); !reflect.DeepEqual(newPod, exp) {
t.Errorf("new pod had EmptyDir Mode but should have been stripped: %v", cmp.Diff(newPod, exp))
}
default:
if !reflect.DeepEqual(newPod, newPodInfo.pod()) {
t.Errorf("new pod changed: %v", cmp.Diff(newPod, newPodInfo.pod()))
}
}
})
}
}
}
}
func TestDropFileKeyRefInUse(t *testing.T) {
testCases := []struct {
name string