From a5575425b039bf7c15dfaa9a7acf257fdc4fde3f Mon Sep 17 00:00:00 2001 From: gxwilkerson33 <125314298+gxwilkerson33@users.noreply.github.com> Date: Wed, 10 May 2023 08:02:58 -0500 Subject: [PATCH] add no resources found message to rollout-status command (#117884) * add no resources found message to rollout-status command * return err if not nil before no resource message --- .../kubectl/pkg/cmd/rollout/rollout_status.go | 14 +++++++++- .../pkg/cmd/rollout/rollout_status_test.go | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status.go b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status.go index 7ea5578452a..8248c9f1b6c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status.go @@ -174,7 +174,9 @@ func (o *RolloutStatusOptions) Run() error { return err } - return r.Visit(func(info *resource.Info, _ error) error { + resourceFound := false + err = r.Visit(func(info *resource.Info, _ error) error { + resourceFound = true mapping := info.ResourceMapping() statusViewer, err := o.StatusViewerFn(mapping) if err != nil { @@ -228,4 +230,14 @@ func (o *RolloutStatusOptions) Run() error { return err }) }) + + if err != nil { + return err + } + + if !resourceFound { + fmt.Fprintf(o.ErrOut, "No resources found in %s namespace.\n", o.Namespace) + } + + return nil } diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status_test.go index 1cc6a2ba513..b8e904bae25 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/rollout/rollout_status_test.go @@ -258,3 +258,29 @@ func TestRolloutStatusWatchDisabledUnavailable(t *testing.T) { t.Errorf("expected output: %s, but got: %s", expectedMsg, buf.String()) } } + +func TestRolloutStatusEmptyList(t *testing.T) { + ns := scheme.Codecs.WithoutConversion() + tf := cmdtesting.NewTestFactory().WithNamespace("test") + tf.ClientConfigVal = cmdtesting.DefaultClientConfig() + + info, _ := runtime.SerializerInfoForMediaType(ns.SupportedMediaTypes(), runtime.ContentTypeJSON) + encoder := ns.EncoderForVersion(info.Serializer, rolloutStatusGroupVersionEncoder) + tf.Client = &fake.RESTClient{ + GroupVersion: rolloutStatusGroupVersionEncoder, + NegotiatedSerializer: ns, + Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { + dep := &appsv1.DeploymentList{} + body := io.NopCloser(bytes.NewReader([]byte(runtime.EncodeOrDie(encoder, dep)))) + return &http.Response{StatusCode: http.StatusOK, Header: cmdtesting.DefaultHeader(), Body: body}, nil + }), + } + streams, _, _, err := genericiooptions.NewTestIOStreams() + cmd := NewCmdRolloutStatus(tf, streams) + cmd.Run(cmd, []string{"deployment"}) + + expectedMsg := "No resources found in test namespace.\n" + if err.String() != expectedMsg { + t.Errorf("expected output: %s, but got: %s", expectedMsg, err.String()) + } +}