diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index 5c9669f3251..d501e266896 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -767,7 +767,11 @@ func printPod(pod *api.Pod, options printers.GenerateOptions) ([]metav1.TableRow // change pod status back to "Running" if there is at least one container still reporting as "Running" status if reason == "Completed" && hasRunning { - reason = "Running" + if hasPodReadyCondition(pod.Status.Conditions) { + reason = "Running" + } else { + reason = "NotReady" + } } } @@ -818,6 +822,15 @@ func printPod(pod *api.Pod, options printers.GenerateOptions) ([]metav1.TableRow return []metav1.TableRow{row}, nil } +func hasPodReadyCondition(conditions []api.PodCondition) bool { + for _, condition := range conditions { + if condition.Type == api.PodReady && condition.Status == api.ConditionTrue { + return true + } + } + return false +} + func printPodTemplate(obj *api.PodTemplate, options printers.GenerateOptions) ([]metav1.TableRow, error) { row := metav1.TableRow{ Object: runtime.RawExtension{Object: obj}, diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index 7201980fabd..1c62da4fbbc 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -1130,7 +1130,7 @@ func TestPrintPod(t *testing.T) { []metav1.TableRow{{Cells: []interface{}{"test5", "1/2", "podReason", int64(6), ""}}}, }, { - // Test pod has 2 containers, one is running and the other is completed. + // Test pod has 2 containers, one is running and the other is completed, w/o ready condition api.Pod{ ObjectMeta: metav1.ObjectMeta{Name: "test6"}, Spec: api.PodSpec{Containers: make([]api.Container, 2)}, @@ -1143,6 +1143,25 @@ func TestPrintPod(t *testing.T) { }, }, }, + []metav1.TableRow{{Cells: []interface{}{"test6", "1/2", "NotReady", int64(6), ""}}}, + }, + { + // Test pod has 2 containers, one is running and the other is completed, with ready condition + api.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: "test6"}, + Spec: api.PodSpec{Containers: make([]api.Container, 2)}, + Status: api.PodStatus{ + Phase: "Running", + Reason: "", + ContainerStatuses: []api.ContainerStatus{ + {Ready: true, RestartCount: 3, State: api.ContainerState{Terminated: &api.ContainerStateTerminated{Reason: "Completed", ExitCode: 0}}}, + {Ready: true, RestartCount: 3, State: api.ContainerState{Running: &api.ContainerStateRunning{}}}, + }, + Conditions: []api.PodCondition{ + {Type: api.PodReady, Status: api.ConditionTrue, LastProbeTime: metav1.Time{Time: time.Now()}}, + }, + }, + }, []metav1.TableRow{{Cells: []interface{}{"test6", "1/2", "Running", int64(6), ""}}}, }, }