in src/app/backend/resource/pod/common.go [133:173]
func getPodStatusPhase(pod v1.Pod, warnings []common.Event) v1.PodPhase {
// For terminated pods that failed
if pod.Status.Phase == v1.PodFailed {
return v1.PodFailed
}
// For successfully terminated pods
if pod.Status.Phase == v1.PodSucceeded {
return v1.PodSucceeded
}
ready := false
initialized := false
for _, c := range pod.Status.Conditions {
if c.Type == v1.PodReady {
ready = c.Status == v1.ConditionTrue
}
if c.Type == v1.PodInitialized {
initialized = c.Status == v1.ConditionTrue
}
}
if initialized && ready && pod.Status.Phase == v1.PodRunning {
return v1.PodRunning
}
// If the pod would otherwise be pending but has warning then label it as
// failed and show and error to the user.
if len(warnings) > 0 {
return v1.PodFailed
}
if pod.DeletionTimestamp != nil && pod.Status.Reason == "NodeLost" {
return v1.PodUnknown
} else if pod.DeletionTimestamp != nil {
return "Terminating"
}
// pending
return v1.PodPending
}