AllowExpandedDNSConfig if haveSameExpandedDNSConfig(newPod, oldPod)

This commit is contained in:
Gunju Kim 2021-05-24 20:58:59 +09:00
parent 6317ce63c6
commit d9681d7266
2 changed files with 391 additions and 1 deletions

View File

@ -390,6 +390,37 @@ func usesIndivisibleHugePagesValues(podSpec *api.PodSpec) bool {
return false
}
// haveSameExpandedDNSConfig returns true if the oldPodSpec already had
// ExpandedDNSConfig and podSpec has the same DNSConfig
func haveSameExpandedDNSConfig(podSpec, oldPodSpec *api.PodSpec) bool {
if oldPodSpec == nil || oldPodSpec.DNSConfig == nil {
return false
}
if podSpec == nil || podSpec.DNSConfig == nil {
return false
}
if len(oldPodSpec.DNSConfig.Searches) <= apivalidation.MaxDNSSearchPathsLegacy &&
len(strings.Join(oldPodSpec.DNSConfig.Searches, " ")) <= apivalidation.MaxDNSSearchListCharsLegacy {
// didn't have ExpandedDNSConfig
return false
}
if len(oldPodSpec.DNSConfig.Searches) != len(podSpec.DNSConfig.Searches) {
// updates DNSConfig
return false
}
for i, oldSearch := range oldPodSpec.DNSConfig.Searches {
if podSpec.DNSConfig.Searches[i] != oldSearch {
// updates DNSConfig
return false
}
}
return true
}
// GetValidationOptionsFromPodSpecAndMeta returns validation options based on pod specs and metadata
func GetValidationOptionsFromPodSpecAndMeta(podSpec, oldPodSpec *api.PodSpec, podMeta, oldPodMeta *metav1.ObjectMeta) apivalidation.PodValidationOptions {
// default pod validation options based on feature gate
@ -403,7 +434,7 @@ func GetValidationOptionsFromPodSpecAndMeta(podSpec, oldPodSpec *api.PodSpec, po
AllowIndivisibleHugePagesValues: false,
AllowWindowsHostProcessField: utilfeature.DefaultFeatureGate.Enabled(features.WindowsHostProcessContainers),
// Allow pod spec with expanded DNS configuration
AllowExpandedDNSConfig: utilfeature.DefaultFeatureGate.Enabled(features.ExpandedDNSConfig),
AllowExpandedDNSConfig: utilfeature.DefaultFeatureGate.Enabled(features.ExpandedDNSConfig) || haveSameExpandedDNSConfig(podSpec, oldPodSpec),
}
if oldPodSpec != nil {

View File

@ -1474,6 +1474,365 @@ func TestValidatePodDeletionCostOption(t *testing.T) {
}
}
func TestHaveSameExpandedDNSConfig(t *testing.T) {
testCases := []struct {
desc string
podSpec *api.PodSpec
oldPodSpec *api.PodSpec
want bool
}{
{
desc: "nil DNSConfig",
podSpec: &api.PodSpec{},
oldPodSpec: &api.PodSpec{},
want: false,
},
{
desc: "empty DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{},
},
want: false,
},
{
desc: "same legacy DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
},
},
},
want: false,
},
{
desc: "update legacy DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"baz.com",
"4.com",
"5.com",
"6.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
},
},
},
want: false,
},
{
desc: "same expanded DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"7.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"7.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
want: true,
},
{
desc: "update expanded DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"baz.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"7.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
want: false,
},
{
desc: "update to legacy DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"baz.com",
"4.com",
"5.com",
"6.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"7.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
want: false,
},
{
desc: "update to expanded DNSConfig",
podSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
"baz.expanded.com",
"8.expanded.com",
"9.expanded.com",
"10.expanded.com",
"11.expanded.com",
"12.expanded.com",
"13.expanded.com",
"14.expanded.com",
"15.expanded.com",
"16.expanded.com",
"17.expanded.com",
"18.expanded.com",
"19.expanded.com",
"20.expanded.com",
"21.expanded.com",
"22.expanded.com",
"23.expanded.com",
"24.expanded.com",
"25.expanded.com",
"26.expanded.com",
"27.expanded.com",
"28.expanded.com",
"29.expanded.com",
"30.expanded.com",
"31.expanded.com",
"32.expanded.com",
},
},
},
oldPodSpec: &api.PodSpec{
DNSConfig: &api.PodDNSConfig{
Searches: []string{
"foo.com",
"bar.io",
"3.com",
"4.com",
"5.com",
"6.com",
},
},
},
want: false,
},
}
for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
got := haveSameExpandedDNSConfig(tc.podSpec, tc.oldPodSpec)
if tc.want != got {
t.Errorf("unexpected diff, want: %v, got: %v", tc.want, got)
}
})
}
}
func TestDropDisabledPodAffinityTermFields(t *testing.T) {
testCases := []struct {
name string