move IPv6DualStack feature to stable. (#104691)
* kube-proxy * endpoints controller * app: kube-controller-manager * app: cloud-controller-manager * kubelet * app: api-server * node utils + registry/strategy * api: validation (comment removal) * api:pod strategy (util pkg) * api: docs * core: integration testing * kubeadm: change feature gate to GA * service registry and rest stack * move feature to GA * generated
This commit is contained in:

committed by
GitHub

parent
c74d799677
commit
a53e2eaeab
@@ -490,32 +490,16 @@ func DropDisabledPodFields(pod, oldPod *api.Pod) {
|
||||
podAnnotations map[string]string
|
||||
oldPodSpec *api.PodSpec
|
||||
oldPodAnnotations map[string]string
|
||||
podStatus *api.PodStatus
|
||||
oldPodStatus *api.PodStatus
|
||||
)
|
||||
if pod != nil {
|
||||
podSpec = &pod.Spec
|
||||
podAnnotations = pod.Annotations
|
||||
podStatus = &pod.Status
|
||||
}
|
||||
if oldPod != nil {
|
||||
oldPodSpec = &oldPod.Spec
|
||||
oldPodAnnotations = oldPod.Annotations
|
||||
oldPodStatus = &oldPod.Status
|
||||
}
|
||||
dropDisabledFields(podSpec, podAnnotations, oldPodSpec, oldPodAnnotations)
|
||||
dropPodStatusDisabledFields(podStatus, oldPodStatus)
|
||||
}
|
||||
|
||||
// dropPodStatusDisabledFields removes disabled fields from the pod status
|
||||
func dropPodStatusDisabledFields(podStatus *api.PodStatus, oldPodStatus *api.PodStatus) {
|
||||
// trim PodIPs down to only one entry (non dual stack).
|
||||
if !utilfeature.DefaultFeatureGate.Enabled(features.IPv6DualStack) &&
|
||||
!multiplePodIPsInUse(oldPodStatus) {
|
||||
if len(podStatus.PodIPs) != 0 {
|
||||
podStatus.PodIPs = podStatus.PodIPs[0:1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// dropDisabledFields removes disabled fields from the pod metadata and spec.
|
||||
@@ -824,17 +808,6 @@ func ephemeralInUse(podSpec *api.PodSpec) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// podPriorityInUse returns true if status is not nil and number of PodIPs is greater than one
|
||||
func multiplePodIPsInUse(podStatus *api.PodStatus) bool {
|
||||
if podStatus == nil {
|
||||
return false
|
||||
}
|
||||
if len(podStatus.PodIPs) > 1 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// SeccompAnnotationForField takes a pod seccomp profile field and returns the
|
||||
// converted annotation value
|
||||
func SeccompAnnotationForField(field *api.SeccompProfile) string {
|
||||
|
@@ -1053,107 +1053,6 @@ func TestDropProbeGracePeriod(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// helper creates a podStatus with list of PodIPs
|
||||
func makePodStatus(podIPs []api.PodIP) *api.PodStatus {
|
||||
return &api.PodStatus{
|
||||
PodIPs: podIPs,
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropStatusPodIPs(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
podStatus *api.PodStatus
|
||||
oldPodStatus *api.PodStatus
|
||||
comparePodStatus *api.PodStatus
|
||||
enableDualStack bool
|
||||
}{
|
||||
{
|
||||
name: "nil pod ips",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus(nil),
|
||||
oldPodStatus: nil,
|
||||
comparePodStatus: makePodStatus(nil),
|
||||
},
|
||||
{
|
||||
name: "empty pod ips",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{}),
|
||||
oldPodStatus: nil,
|
||||
comparePodStatus: makePodStatus([]api.PodIP{}),
|
||||
},
|
||||
{
|
||||
name: "single family ipv6",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}}),
|
||||
},
|
||||
{
|
||||
name: "single family ipv4",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "1.1.1.1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "1.1.1.1"}}),
|
||||
},
|
||||
{
|
||||
name: "dualstack 4-6",
|
||||
enableDualStack: true,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "1.1.1.1"}, {IP: "::1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "1.1.1.1"}, {IP: "::1"}}),
|
||||
},
|
||||
{
|
||||
name: "dualstack 6-4",
|
||||
enableDualStack: true,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
},
|
||||
{
|
||||
name: "not dualstack 6-4=>4only",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
oldPodStatus: nil,
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}}),
|
||||
},
|
||||
{
|
||||
name: "not dualstack 6-4=>as is (used in old)",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
oldPodStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
},
|
||||
{
|
||||
name: "not dualstack 6-4=>6only",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
oldPodStatus: nil,
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}}),
|
||||
},
|
||||
{
|
||||
name: "not dualstack 6-4=>as is (used in old)",
|
||||
enableDualStack: false,
|
||||
podStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
oldPodStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
comparePodStatus: makePodStatus([]api.PodIP{{IP: "::1"}, {IP: "1.1.1.1"}}),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
func() {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.IPv6DualStack, tc.enableDualStack)()
|
||||
dropPodStatusDisabledFields(tc.podStatus, tc.oldPodStatus)
|
||||
|
||||
old := tc.oldPodStatus.DeepCopy()
|
||||
// old pod status should never be changed
|
||||
if !reflect.DeepEqual(tc.oldPodStatus, old) {
|
||||
t.Errorf("%v: old pod status changed: %v", tc.name, cmp.Diff(tc.oldPodStatus, old))
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(tc.podStatus, tc.comparePodStatus) {
|
||||
t.Errorf("%v: unexpected pod status: %v", tc.name, cmp.Diff(tc.podStatus, tc.comparePodStatus))
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropEphemeralContainers(t *testing.T) {
|
||||
podWithEphemeralContainers := func() *api.Pod {
|
||||
return &api.Pod{
|
||||
|
Reference in New Issue
Block a user