From e77df88200f6e8ab13680358c4e7b0f68e5f0c98 Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Mon, 17 Feb 2020 17:10:23 +0100 Subject: [PATCH] Present more concrete information about pod readiness --- pkg/printers/internalversion/printers.go | 15 ++++++++++++- pkg/printers/internalversion/printers_test.go | 21 ++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index 67974c6da12..86e85149e77 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -756,7 +756,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" + } } } @@ -807,6 +811,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 ff73ae6c10e..8a6371c3847 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -1064,7 +1064,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)}, @@ -1077,6 +1077,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), ""}}}, }, }