From d4d299e1ccbfe0bb46347a45ea1741ac6b4da153 Mon Sep 17 00:00:00 2001 From: liuwei Date: Fri, 29 Mar 2019 10:54:31 +0800 Subject: [PATCH] Add the step name in taskrun status --- pkg/apis/pipeline/v1alpha1/taskrun_types.go | 1 + .../v1alpha1/taskrun/resources/pod.go | 6 ++ pkg/reconciler/v1alpha1/taskrun/taskrun.go | 3 +- .../v1alpha1/taskrun/taskrun_test.go | 57 +++++++++++++++---- test/taskrun_test.go | 4 ++ 5 files changed, 58 insertions(+), 13 deletions(-) diff --git a/pkg/apis/pipeline/v1alpha1/taskrun_types.go b/pkg/apis/pipeline/v1alpha1/taskrun_types.go index 853a9bdeaee..470f9a57b1e 100644 --- a/pkg/apis/pipeline/v1alpha1/taskrun_types.go +++ b/pkg/apis/pipeline/v1alpha1/taskrun_types.go @@ -162,6 +162,7 @@ func (tr *TaskRunStatus) SetCondition(newCond *apis.Condition) { // StepState reports the results of running a step in the Task. type StepState struct { corev1.ContainerState + Name string `json:"name,omitempty"` } // +genclient diff --git a/pkg/reconciler/v1alpha1/taskrun/resources/pod.go b/pkg/reconciler/v1alpha1/taskrun/resources/pod.go index b5d26eaaedc..d5ec59c583f 100644 --- a/pkg/reconciler/v1alpha1/taskrun/resources/pod.go +++ b/pkg/reconciler/v1alpha1/taskrun/resources/pod.go @@ -26,6 +26,7 @@ import ( "io" "io/ioutil" "path/filepath" + "strings" "go.uber.org/zap" corev1 "k8s.io/api/core/v1" @@ -311,3 +312,8 @@ func findMaxResourceRequest(containers []corev1.Container, resourceNames ...core } return maxIdxs } + +// TrimContainerNamePrefix trim the container name prefix to get the corresponding step name +func TrimContainerNamePrefix(containerName string) string { + return strings.TrimPrefix(containerName, containerPrefix) +} diff --git a/pkg/reconciler/v1alpha1/taskrun/taskrun.go b/pkg/reconciler/v1alpha1/taskrun/taskrun.go index cf000caef40..8b79e5bbbe1 100644 --- a/pkg/reconciler/v1alpha1/taskrun/taskrun.go +++ b/pkg/reconciler/v1alpha1/taskrun/taskrun.go @@ -344,6 +344,7 @@ func updateStatusFromPod(taskRun *v1alpha1.TaskRun, pod *corev1.Pod) { for _, s := range pod.Status.ContainerStatuses { taskRun.Status.Steps = append(taskRun.Status.Steps, v1alpha1.StepState{ ContainerState: *s.State.DeepCopy(), + Name: resources.TrimContainerNamePrefix(s.Name), }) } @@ -413,7 +414,7 @@ func getFailureMessage(pod *corev1.Pod) string { for _, status := range pod.Status.ContainerStatuses { term := status.State.Terminated if term != nil && term.ExitCode != 0 { - return fmt.Sprintf("build step %q exited with code %d (image: %q); for logs run: kubectl -n %s logs %s -c %s", + return fmt.Sprintf("%q exited with code %d (image: %q); for logs run: kubectl -n %s logs %s -c %s", status.Name, term.ExitCode, status.ImageID, pod.Namespace, pod.Name, status.Name) } diff --git a/pkg/reconciler/v1alpha1/taskrun/taskrun_test.go b/pkg/reconciler/v1alpha1/taskrun/taskrun_test.go index 2ef0d17b130..2454b6d3902 100644 --- a/pkg/reconciler/v1alpha1/taskrun/taskrun_test.go +++ b/pkg/reconciler/v1alpha1/taskrun/taskrun_test.go @@ -1269,10 +1269,11 @@ func TestUpdateStatusFromPod(t *testing.T) { Conditions: []apis.Condition{conditionRunning}, }, Steps: []v1alpha1.StepState{{ - corev1.ContainerState{ + ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ ExitCode: 123, }}, + Name: "state-name", }}, }, }, { @@ -1297,31 +1298,61 @@ func TestUpdateStatusFromPod(t *testing.T) { Conditions: []apis.Condition{conditionRunning}, }, Steps: []v1alpha1.StepState{{ - corev1.ContainerState{ + ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ ExitCode: 123, }}, + Name: "state-name", }}, }, }, { - desc: "success", - podStatus: corev1.PodStatus{Phase: corev1.PodSucceeded}, + desc: "success", + podStatus: corev1.PodStatus{ + Phase: corev1.PodSucceeded, + ContainerStatuses: []corev1.ContainerStatus{{ + Name: "build-step-build-step-push", + State: corev1.ContainerState{ + Terminated: &corev1.ContainerStateTerminated{ + ExitCode: 0, + }, + }, + }}, + }, want: v1alpha1.TaskRunStatus{ Status: duckv1beta1.Status{ Conditions: []apis.Condition{conditionTrue}, }, - Steps: []v1alpha1.StepState{}, + Steps: []v1alpha1.StepState{{ + ContainerState: corev1.ContainerState{ + Terminated: &corev1.ContainerStateTerminated{ + ExitCode: 0, + }}, + Name: "build-step-push", + }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, }, }, { - desc: "running", - podStatus: corev1.PodStatus{Phase: corev1.PodRunning}, + desc: "running", + podStatus: corev1.PodStatus{ + Phase: corev1.PodRunning, + ContainerStatuses: []corev1.ContainerStatus{{ + Name: "build-step-running-step", + State: corev1.ContainerState{ + Running: &corev1.ContainerStateRunning{}, + }, + }}, + }, want: v1alpha1.TaskRunStatus{ Status: duckv1beta1.Status{ Conditions: []apis.Condition{conditionBuilding}, }, - Steps: []v1alpha1.StepState{}, + Steps: []v1alpha1.StepState{{ + ContainerState: corev1.ContainerState{ + Running: &corev1.ContainerStateRunning{}, + }, + Name: "running-step", + }}, }, }, { desc: "failure-terminated", @@ -1331,7 +1362,7 @@ func TestUpdateStatusFromPod(t *testing.T) { // creds-init status; ignored }}, ContainerStatuses: []corev1.ContainerStatus{{ - Name: "status-name", + Name: "build-step-failure", ImageID: "image-id", State: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ @@ -1345,14 +1376,15 @@ func TestUpdateStatusFromPod(t *testing.T) { Conditions: []apis.Condition{{ Type: apis.ConditionSucceeded, Status: corev1.ConditionFalse, - Message: `build step "status-name" exited with code 123 (image: "image-id"); for logs run: kubectl -n foo logs pod -c status-name`, + Message: `"build-step-failure" exited with code 123 (image: "image-id"); for logs run: kubectl -n foo logs pod -c build-step-failure`, }}, }, Steps: []v1alpha1.StepState{{ - corev1.ContainerState{ + ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ ExitCode: 123, }}, + Name: "failure", }}, // We don't actually care about the time, just that it's not nil CompletionTime: &metav1.Time{Time: time.Now()}, @@ -1416,11 +1448,12 @@ func TestUpdateStatusFromPod(t *testing.T) { }}, }, Steps: []v1alpha1.StepState{{ - corev1.ContainerState{ + ContainerState: corev1.ContainerState{ Waiting: &corev1.ContainerStateWaiting{ Message: "i'm pending", }, }, + Name: "status-name", }}, }, }, { diff --git a/test/taskrun_test.go b/test/taskrun_test.go index af56e9220b4..2face079266 100644 --- a/test/taskrun_test.go +++ b/test/taskrun_test.go @@ -78,6 +78,7 @@ func TestTaskRunFailure(t *testing.T) { Reason: "Error", }, }, + Name: "exit", }, { ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ @@ -85,6 +86,7 @@ func TestTaskRunFailure(t *testing.T) { Reason: "Completed", }, }, + Name: "hello", }, { ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ @@ -92,6 +94,7 @@ func TestTaskRunFailure(t *testing.T) { Reason: "Completed", }, }, + Name: "world", }, { ContainerState: corev1.ContainerState{ Terminated: &corev1.ContainerStateTerminated{ @@ -99,6 +102,7 @@ func TestTaskRunFailure(t *testing.T) { Reason: "Completed", }, }, + Name: "nop", }} ignoreFields := cmpopts.IgnoreFields(corev1.ContainerStateTerminated{}, "StartedAt", "FinishedAt", "ContainerID") if d := cmp.Diff(taskrun.Status.Steps, expectedStepState, ignoreFields); d != "" {