mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 10:51:29 +00:00
Fix match onExitCodes when Pod is not terminated
Change-Id: Id1f9c46f8b6a12115577a1fadb12adc580c9ba6a
This commit is contained in:
parent
cc704f9778
commit
bc5afaf580
@ -68,6 +68,8 @@ func matchPodFailurePolicy(podFailurePolicy *batch.PodFailurePolicy, failedPod *
|
|||||||
return nil, true, nil
|
return nil, true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// matchOnExitCodes returns a terminated container status that matches the error code requirement, if any exists.
|
||||||
|
// If the returned status is non-nil, it has a non-nil Terminated field.
|
||||||
func matchOnExitCodes(podStatus *v1.PodStatus, requirement *batch.PodFailurePolicyOnExitCodesRequirement) *v1.ContainerStatus {
|
func matchOnExitCodes(podStatus *v1.PodStatus, requirement *batch.PodFailurePolicyOnExitCodesRequirement) *v1.ContainerStatus {
|
||||||
if containerStatus := getMatchingContainerFromList(podStatus.ContainerStatuses, requirement); containerStatus != nil {
|
if containerStatus := getMatchingContainerFromList(podStatus.ContainerStatuses, requirement); containerStatus != nil {
|
||||||
return containerStatus
|
return containerStatus
|
||||||
@ -86,8 +88,16 @@ func matchOnPodConditions(podStatus *v1.PodStatus, requirement []batch.PodFailur
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getMatchingContainerFromList returns the first terminated container status in the list that matches the error code requirement, or nil if none match.
|
||||||
|
// If the returned status is non-nil, it has a non-nil Terminated field
|
||||||
func getMatchingContainerFromList(containerStatuses []v1.ContainerStatus, requirement *batch.PodFailurePolicyOnExitCodesRequirement) *v1.ContainerStatus {
|
func getMatchingContainerFromList(containerStatuses []v1.ContainerStatus, requirement *batch.PodFailurePolicyOnExitCodesRequirement) *v1.ContainerStatus {
|
||||||
for _, containerStatus := range containerStatuses {
|
for _, containerStatus := range containerStatuses {
|
||||||
|
if containerStatus.State.Terminated == nil {
|
||||||
|
// This container is still be terminating. There is no exit code to match.
|
||||||
|
// TODO(#113855): Remove this check when it's guaranteed that the
|
||||||
|
// container is terminated.
|
||||||
|
continue
|
||||||
|
}
|
||||||
if requirement.ContainerName == nil || *requirement.ContainerName == containerStatus.Name {
|
if requirement.ContainerName == nil || *requirement.ContainerName == containerStatus.Name {
|
||||||
if containerStatus.State.Terminated.ExitCode != 0 {
|
if containerStatus.State.Terminated.ExitCode != 0 {
|
||||||
if isOnExitCodesOperatorMatching(containerStatus.State.Terminated.ExitCode, requirement) {
|
if isOnExitCodesOperatorMatching(containerStatus.State.Terminated.ExitCode, requirement) {
|
||||||
|
@ -389,7 +389,10 @@ func TestMatchPodFailurePolicy(t *testing.T) {
|
|||||||
Phase: v1.PodFailed,
|
Phase: v1.PodFailed,
|
||||||
ContainerStatuses: []v1.ContainerStatus{
|
ContainerStatuses: []v1.ContainerStatus{
|
||||||
{
|
{
|
||||||
Name: "main-container",
|
Name: "foo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "bar",
|
||||||
State: v1.ContainerState{
|
State: v1.ContainerState{
|
||||||
Terminated: &v1.ContainerStateTerminated{
|
Terminated: &v1.ContainerStateTerminated{
|
||||||
ExitCode: 2,
|
ExitCode: 2,
|
||||||
|
Loading…
Reference in New Issue
Block a user