From 03a8142a7289753ebba8b45af777bd476b3b8c8f Mon Sep 17 00:00:00 2001 From: Hui Kang Date: Thu, 19 Aug 2021 15:32:59 -0400 Subject: [PATCH] fix: inconsistent status command output Signed-off-by: Hui Kang --- .../cmd/status/status.go | 19 ++++++++++++------- .../cmd/status/status_test.go | 12 ++++++------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/pkg/kubectl-argo-rollouts/cmd/status/status.go b/pkg/kubectl-argo-rollouts/cmd/status/status.go index c7b9a0a323..aacddea231 100644 --- a/pkg/kubectl-argo-rollouts/cmd/status/status.go +++ b/pkg/kubectl-argo-rollouts/cmd/status/status.go @@ -58,7 +58,11 @@ func NewCmdStatus(o *options.ArgoRolloutsOptions) *cobra.Command { } if !statusOptions.Watch { - fmt.Fprintln(o.Out, ri.Status) + if ri.Status == "Healthy" || ri.Status == "Degraded" { + fmt.Fprintln(o.Out, ri.Status) + } else { + fmt.Fprintf(o.Out, "%s - %s\n", ri.Status, ri.Message) + } } else { rolloutUpdates := make(chan *rollout.RolloutInfo) defer close(rolloutUpdates) @@ -68,16 +72,17 @@ func NewCmdStatus(o *options.ArgoRolloutsOptions) *cobra.Command { go controller.Run(ctx) statusOptions.WatchStatus(ctx.Done(), rolloutUpdates) - finalRi, err := controller.GetRolloutInfo() + // the final rollout info after timeout or reach Healthy or Degraded status + ri, err = controller.GetRolloutInfo() if err != nil { return err } + } - if finalRi.Status == "Degraded" { - return fmt.Errorf("The rollout is in a degraded state with message: %s", finalRi.Message) - } else if finalRi.Status != "Healthy" { - return fmt.Errorf("Rollout progress exceeded timeout") - } + if ri.Status == "Degraded" { + return fmt.Errorf("The rollout is in a degraded state with message: %s", ri.Message) + } else if ri.Status != "Healthy" && statusOptions.Watch { + return fmt.Errorf("Rollout status watch exceeded timeout") } return nil diff --git a/pkg/kubectl-argo-rollouts/cmd/status/status_test.go b/pkg/kubectl-argo-rollouts/cmd/status/status_test.go index fca1bfef05..24c103d584 100644 --- a/pkg/kubectl-argo-rollouts/cmd/status/status_test.go +++ b/pkg/kubectl-argo-rollouts/cmd/status/status_test.go @@ -66,7 +66,7 @@ func TestStatusBlueGreenRollout(t *testing.T) { assert.NoError(t, err) stdout := o.Out.(*bytes.Buffer).String() stderr := o.ErrOut.(*bytes.Buffer).String() - assert.Equal(t, "Paused\n", stdout) + assert.Equal(t, "Paused - BlueGreenPause\n", stdout) assert.Empty(t, stderr) } @@ -81,11 +81,11 @@ func TestStatusInvalidRollout(t *testing.T) { cmd.SetArgs([]string{rolloutObjs.Rollouts[0].Name, noWatch}) err := cmd.Execute() - assert.NoError(t, err) + assert.Error(t, err) stdout := o.Out.(*bytes.Buffer).String() stderr := o.ErrOut.(*bytes.Buffer).String() assert.Equal(t, "Degraded\n", stdout) - assert.Empty(t, stderr) + assert.Equal(t, "Error: The rollout is in a degraded state with message: InvalidSpec: The Rollout \"rollout-invalid\" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{\"app\":\"doesnt-match\"}: `selector` does not match template `labels`\n", stderr) } func TestStatusAbortedRollout(t *testing.T) { @@ -99,11 +99,11 @@ func TestStatusAbortedRollout(t *testing.T) { cmd.SetArgs([]string{rolloutObjs.Rollouts[0].Name, noWatch}) err := cmd.Execute() - assert.NoError(t, err) + assert.Error(t, err) stdout := o.Out.(*bytes.Buffer).String() stderr := o.ErrOut.(*bytes.Buffer).String() assert.Equal(t, "Degraded\n", stdout) - assert.Empty(t, stderr) + assert.Equal(t, "Error: The rollout is in a degraded state with message: RolloutAborted: metric \"web\" assessed Failed due to failed (1) > failureLimit (0)\n", stderr) } func TestWatchAbortedRollout(t *testing.T) { @@ -139,5 +139,5 @@ func TestWatchTimeoutRollout(t *testing.T) { stdout := o.Out.(*bytes.Buffer).String() stderr := o.ErrOut.(*bytes.Buffer).String() assert.Equal(t, "Paused - BlueGreenPause\n", stdout) - assert.Equal(t, "Error: Rollout progress exceeded timeout\n", stderr) + assert.Equal(t, "Error: Rollout status watch exceeded timeout\n", stderr) }