Skip to content

Commit

Permalink
fix: inconsistent status command output (#1433)
Browse files Browse the repository at this point in the history
Signed-off-by: Hui Kang <[email protected]>
  • Loading branch information
huikang authored Nov 5, 2021
1 parent 6b2b375 commit 75cdde7
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 17 deletions.
17 changes: 14 additions & 3 deletions controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
informers "github.com/argoproj/argo-rollouts/pkg/client/informers/externalversions"
rolloutController "github.com/argoproj/argo-rollouts/rollout"
"github.com/argoproj/argo-rollouts/service"
ingressutil "github.com/argoproj/argo-rollouts/utils/ingress"
istioutil "github.com/argoproj/argo-rollouts/utils/istio"
"github.com/argoproj/argo-rollouts/utils/queue"
"github.com/argoproj/argo-rollouts/utils/record"
Expand Down Expand Up @@ -118,6 +119,11 @@ func (f *fixture) newManager(t *testing.T) *Manager {
istioVirtualServiceInformer := dynamicInformerFactory.ForResource(istioutil.GetIstioVirtualServiceGVR()).Informer()
istioDestinationRuleInformer := dynamicInformerFactory.ForResource(istioutil.GetIstioDestinationRuleGVR()).Informer()

mode, err := ingressutil.DetermineIngressMode("extensions/v1beta1", &discoveryfake.FakeDiscovery{})
assert.NoError(t, err)
ingressWrapper, err := ingressutil.NewIngressWrapper(mode, f.kubeclient, k8sI)
assert.NoError(t, err)

cm.rolloutController = rolloutController.NewController(rolloutController.ControllerConfig{
Namespace: metav1.NamespaceAll,
KubeClientSet: f.kubeclient,
Expand All @@ -129,7 +135,7 @@ func (f *fixture) newManager(t *testing.T) *Manager {
ClusterAnalysisTemplateInformer: i.Argoproj().V1alpha1().ClusterAnalysisTemplates(),
ReplicaSetInformer: k8sI.Apps().V1().ReplicaSets(),
ServicesInformer: k8sI.Core().V1().Services(),
IngressInformer: k8sI.Extensions().V1beta1().Ingresses(),
IngressWrapper: ingressWrapper,
RolloutsInformer: i.Argoproj().V1alpha1().Rollouts(),
IstioPrimaryDynamicClient: dynamicClient,
IstioVirtualServiceInformer: istioVirtualServiceInformer,
Expand All @@ -155,7 +161,7 @@ func (f *fixture) newManager(t *testing.T) *Manager {

cm.ingressController = ingress.NewController(ingress.ControllerConfig{
Client: f.kubeclient,
IngressInformer: k8sI.Extensions().V1beta1().Ingresses(),
IngressWrap: ingressWrapper,
IngressWorkQueue: ingressWorkqueue,

RolloutsInformer: i.Argoproj().V1alpha1().Rollouts(),
Expand Down Expand Up @@ -245,6 +251,11 @@ func TestNewManager(t *testing.T) {
istioVirtualServiceInformer := dynamicInformerFactory.ForResource(istioutil.GetIstioVirtualServiceGVR()).Informer()
istioDestinationRuleInformer := dynamicInformerFactory.ForResource(istioutil.GetIstioDestinationRuleGVR()).Informer()

mode, err := ingressutil.DetermineIngressMode("extensions/v1beta1", &discoveryfake.FakeDiscovery{})
assert.NoError(t, err)
ingressWrapper, err := ingressutil.NewIngressWrapper(mode, f.kubeclient, k8sI)
assert.NoError(t, err)

k8sRequestProvider := &metrics.K8sRequestsCountProvider{}
cm := NewManager(
"default",
Expand All @@ -255,7 +266,7 @@ func TestNewManager(t *testing.T) {
&discoveryfake.FakeDiscovery{},
k8sI.Apps().V1().ReplicaSets(),
k8sI.Core().V1().Services(),
k8sI.Extensions().V1beta1().Ingresses(),
ingressWrapper,
k8sI.Batch().V1().Jobs(),
i.Argoproj().V1alpha1().Rollouts(),
i.Argoproj().V1alpha1().Experiments(),
Expand Down
22 changes: 14 additions & 8 deletions pkg/kubectl-argo-rollouts/cmd/status/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,25 +60,31 @@ 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)
controller.RegisterCallback(func(roInfo *rollout.RolloutInfo) {
rolloutUpdates <- roInfo
})
go controller.Run(ctx)
statusOptions.WatchStatus(ctx.Done(), rolloutUpdates)
close(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
}
close(rolloutUpdates)
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
Expand Down
12 changes: 6 additions & 6 deletions pkg/kubectl-argo-rollouts/cmd/status/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand All @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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)
}

0 comments on commit 75cdde7

Please sign in to comment.