diff --git a/controller/controller_test.go b/controller/controller_test.go index 1ada6e195b..da7c22f7bc 100644 --- a/controller/controller_test.go +++ b/controller/controller_test.go @@ -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" @@ -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, @@ -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, @@ -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(), @@ -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", @@ -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(), diff --git a/pkg/kubectl-argo-rollouts/cmd/status/status.go b/pkg/kubectl-argo-rollouts/cmd/status/status.go index 7508902fc0..fe7058f1d5 100644 --- a/pkg/kubectl-argo-rollouts/cmd/status/status.go +++ b/pkg/kubectl-argo-rollouts/cmd/status/status.go @@ -60,7 +60,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) controller.RegisterCallback(func(roInfo *rollout.RolloutInfo) { @@ -68,17 +72,19 @@ func NewCmdStatus(o *options.ArgoRolloutsOptions) *cobra.Command { }) 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 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) }