in pkg/controllers/common_utils.go [108:149]
func checkContainersForError(containerStatuses []corev1.ContainerStatus, podName string) (errs []string) {
for _, containerStatus := range containerStatuses {
containerState := containerStatus.State
if containerStatus.Ready ||
containerState.Running != nil {
// Container is either ready or running
// No errors yet in the current run.
continue
}
if containerState.Waiting != nil {
if containerState.Waiting.Reason != PodInitializing &&
containerState.Waiting.Reason != ContainerCreating {
msg := fmt.Sprintf("pod %q struck in waiting state : %s", podName,
containerState.Waiting.Reason)
if containerState.Waiting.Message != "" {
// Append the message to err
msg += " : " + containerState.Waiting.Message
}
errs = append(errs, msg)
}
// Container is waiting, check for failure in LastTerminationState if any
containerState = containerStatus.LastTerminationState
}
// Check if the container was terminated and if terminated, check the exit code :
// only 0 (graceful shutdown) and 137 (killed by SIGKILL) are allowed.
if containerState.Terminated != nil &&
containerState.Terminated.ExitCode != 0 && containerState.Terminated.ExitCode != 137 {
msg := fmt.Sprintf("pod %q failed : container %q terminated with exit code %d",
podName, containerStatus.Name, containerState.Terminated.ExitCode)
if containerState.Terminated.Message != "" {
// Append the message to err
msg += " : " + containerState.Terminated.Message
}
errs = append(errs, msg)
}
}
return errs
}