endpointslices: terminal pods doesn't receive enpoints

This commit is contained in:
Antonio Ojea 2022-05-18 17:06:11 +02:00
parent d16d23e0c7
commit b905c2870b
2 changed files with 8 additions and 13 deletions

View File

@ -138,6 +138,12 @@ func DeepHashObjectToString(objectToWrite interface{}) string {
// ShouldPodBeInEndpointSlice returns true if a specified pod should be in an EndpointSlice object.
// Terminating pods are only included if includeTerminating is true
func ShouldPodBeInEndpointSlice(pod *v1.Pod, includeTerminating bool) bool {
// "Terminal" describes when a Pod is complete (in a succeeded or failed phase).
// This is distinct from the "Terminating" condition which represents when a Pod
// is being terminated (metadata.deletionTimestamp is non nil).
if podutil.IsPodTerminal(pod) {
return false
}
if len(pod.Status.PodIP) == 0 && len(pod.Status.PodIPs) == 0 {
return false
}
@ -146,14 +152,6 @@ func ShouldPodBeInEndpointSlice(pod *v1.Pod, includeTerminating bool) bool {
return false
}
if pod.Spec.RestartPolicy == v1.RestartPolicyNever {
return pod.Status.Phase != v1.PodFailed && pod.Status.Phase != v1.PodSucceeded
}
if pod.Spec.RestartPolicy == v1.RestartPolicyOnFailure {
return pod.Status.Phase != v1.PodSucceeded
}
return true
}

View File

@ -99,9 +99,6 @@ func TestDetermineNeededServiceUpdates(t *testing.T) {
}
}
// There are 3*5 possibilities(3 types of RestartPolicy by 5 types of PodPhase).
// Not listing them all here. Just listing all of the 3 false cases and 3 of the
// 12 true cases.
func TestShouldPodBeInEndpointSlice(t *testing.T) {
testCases := []struct {
name string
@ -179,7 +176,6 @@ func TestShouldPodBeInEndpointSlice(t *testing.T) {
},
expected: false,
},
// Pod should be in endpoints:
{
name: "Failed pod with Always RestartPolicy",
pod: &v1.Pod{
@ -191,8 +187,9 @@ func TestShouldPodBeInEndpointSlice(t *testing.T) {
PodIP: "1.2.3.4",
},
},
expected: true,
expected: false,
},
// Pod should be in endpoints:
{
name: "Pending pod with Never RestartPolicy",
pod: &v1.Pod{