mirror of
https://github.com/kubernetes/kubernetes.git
synced 2026-08-09 08:21:09 +00:00
Add feature gate drop logic for emptyDir mode
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user