From 1b129f017b53f0d9380fc8a1a02dd5b4ba708db0 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 Kubernetes-commit: a5575425b039bf7c15dfaa9a7acf257fdc4fde3f --- go.mod | 22 +++++++++++----------- go.sum | 20 ++++++++++---------- pkg/cmd/rollout/rollout_status.go | 14 +++++++++++++- pkg/cmd/rollout/rollout_status_test.go | 26 ++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index f7d22f7bb..c185ccdbd 100644 --- a/go.mod +++ b/go.mod @@ -30,15 +30,15 @@ require ( github.com/stretchr/testify v1.8.2 golang.org/x/sys v0.7.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.0.0-20230503175224-7a87286591e4 - k8s.io/apimachinery v0.0.0-20230503174314-7ecc58659e5e + k8s.io/api v0.0.0-20230506223117-f3a0f2ed177a + k8s.io/apimachinery v0.0.0-20230508165628-e7958c5fe270 k8s.io/cli-runtime v0.0.0-20230504080109-6a67eceb5a5c - k8s.io/client-go v0.0.0-20230505090544-bbdc95deee6f - k8s.io/component-base v0.0.0-20230503184328-d8237c55bb0d + k8s.io/client-go v0.0.0-20230509212518-783d0d33626e + k8s.io/component-base v0.0.0-20230510051351-394420edbb3f k8s.io/component-helpers v0.0.0-20230503184823-e13365989545 k8s.io/klog/v2 v2.100.1 k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f - k8s.io/metrics v0.0.0-20230503201041-0e3d051e3ef2 + k8s.io/metrics v0.0.0-20230509222513-a85c404a533e k8s.io/utils v0.0.0-20230209194617-a36077c30491 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd sigs.k8s.io/kustomize/kustomize/v5 v5.0.1 @@ -94,12 +94,12 @@ require ( ) replace ( - k8s.io/api => k8s.io/api v0.0.0-20230503175224-7a87286591e4 - k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230503174314-7ecc58659e5e + k8s.io/api => k8s.io/api v0.0.0-20230506223117-f3a0f2ed177a + k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230508165628-e7958c5fe270 k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20230504080109-6a67eceb5a5c - k8s.io/client-go => k8s.io/client-go v0.0.0-20230505090544-bbdc95deee6f - k8s.io/code-generator => k8s.io/code-generator v0.0.0-20230503172937-f7315244e4ce - k8s.io/component-base => k8s.io/component-base v0.0.0-20230503184328-d8237c55bb0d + k8s.io/client-go => k8s.io/client-go v0.0.0-20230509212518-783d0d33626e + k8s.io/code-generator => k8s.io/code-generator v0.0.0-20230509180209-89a7a4d0e489 + k8s.io/component-base => k8s.io/component-base v0.0.0-20230510051351-394420edbb3f k8s.io/component-helpers => k8s.io/component-helpers v0.0.0-20230503184823-e13365989545 - k8s.io/metrics => k8s.io/metrics v0.0.0-20230503201041-0e3d051e3ef2 + k8s.io/metrics => k8s.io/metrics v0.0.0-20230509222513-a85c404a533e ) diff --git a/go.sum b/go.sum index 496f603ff..9e518a78a 100644 --- a/go.sum +++ b/go.sum @@ -540,24 +540,24 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.0.0-20230503175224-7a87286591e4 h1:cxVILqCCBsq5MCwFs3RkBL8HDUwZ6Sh5qH0UBJSTnnw= -k8s.io/api v0.0.0-20230503175224-7a87286591e4/go.mod h1:/fu24lnfAhrloAI7EhcGTa0fXXQH5r4rUqEQMW9endY= -k8s.io/apimachinery v0.0.0-20230503174314-7ecc58659e5e h1:zTmKa/UVIS4WvRrYbIblypAjK81XFnlq8zxUCiBFgFE= -k8s.io/apimachinery v0.0.0-20230503174314-7ecc58659e5e/go.mod h1:jF849JXyKVKRC0O62ZBSygt6qOSEYju8i90sKd1mx4g= +k8s.io/api v0.0.0-20230506223117-f3a0f2ed177a h1:8sUE9zRxWwhC0FmKr0+Jtm6wgnL3ljlVJOT94jSVsO4= +k8s.io/api v0.0.0-20230506223117-f3a0f2ed177a/go.mod h1:/fu24lnfAhrloAI7EhcGTa0fXXQH5r4rUqEQMW9endY= +k8s.io/apimachinery v0.0.0-20230508165628-e7958c5fe270 h1:0kz1rv3L87V/4KNEVPlst7yhT5RfAC+5JqeXR3rBXVc= +k8s.io/apimachinery v0.0.0-20230508165628-e7958c5fe270/go.mod h1:jF849JXyKVKRC0O62ZBSygt6qOSEYju8i90sKd1mx4g= k8s.io/cli-runtime v0.0.0-20230504080109-6a67eceb5a5c h1:gITBbx6eAQQ5SgiMn3vjRyR00nE1IYes26fBH1zbsUc= k8s.io/cli-runtime v0.0.0-20230504080109-6a67eceb5a5c/go.mod h1:ixnBuX8weZhKqsRkVWPDthO0+XyV8Zb+Dm/VG2JmQoE= -k8s.io/client-go v0.0.0-20230505090544-bbdc95deee6f h1:2ay98zE1TJH8YXO2PvRz3x72AScfGwrJu8gZKr8mFxY= -k8s.io/client-go v0.0.0-20230505090544-bbdc95deee6f/go.mod h1:KbdynSEZqrbOI2U7keuj6YcwapdnH1uqm4B5ZTlKl3Q= -k8s.io/component-base v0.0.0-20230503184328-d8237c55bb0d h1:fFtyr79NYtiblUPlY9jBGOxz6oJ+InvkHO2CuXCt9kY= -k8s.io/component-base v0.0.0-20230503184328-d8237c55bb0d/go.mod h1:whrRS7Eo7V9CAjv5tN/lSHTNdU7GimImJs2398lzkHg= +k8s.io/client-go v0.0.0-20230509212518-783d0d33626e h1:LpWwrdVPWBo4qvabkUmgiTVVrG60WB2Aq7vL/+CuFVY= +k8s.io/client-go v0.0.0-20230509212518-783d0d33626e/go.mod h1:cEaa9OUfUngJoratq5HOLPAqYQuGXvAXcib8cBvOLhQ= +k8s.io/component-base v0.0.0-20230510051351-394420edbb3f h1:fRDW72RPFuh2ICNsCZCnEG/0tiKMDRyL/YVJ1RyVL74= +k8s.io/component-base v0.0.0-20230510051351-394420edbb3f/go.mod h1:OZt7sB3oDI0Zde3l1u9cPMS4sDIg62oCaaGt3ifkLBg= k8s.io/component-helpers v0.0.0-20230503184823-e13365989545 h1:we8rVlPuvlPzZu0GPqB5mfJiFVypCn1mHRtcj/+RE+k= k8s.io/component-helpers v0.0.0-20230503184823-e13365989545/go.mod h1:/80xHbyNUOWQDlqQY3/tYGQb0iauI/zFw3PwSURMNvI= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/metrics v0.0.0-20230503201041-0e3d051e3ef2 h1:7Sv0E88nYKu/nXVP+iKR7ZnXXGE5KcPjOXsU+TFo4TE= -k8s.io/metrics v0.0.0-20230503201041-0e3d051e3ef2/go.mod h1:cQI162g705VM24ahnXgDA7UHi1N/N6/PiRsuNYmgolo= +k8s.io/metrics v0.0.0-20230509222513-a85c404a533e h1:WyqSbvuKfcI+786a90tUbxG/zjZ8lc+iNukkvOOYQSo= +k8s.io/metrics v0.0.0-20230509222513-a85c404a533e/go.mod h1:NmxcJrJm4XizsA3tx1O/5Fb8pV599o9ZrKu70qL4E0g= k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/pkg/cmd/rollout/rollout_status.go b/pkg/cmd/rollout/rollout_status.go index 7ea557845..8248c9f1b 100644 --- a/pkg/cmd/rollout/rollout_status.go +++ b/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/pkg/cmd/rollout/rollout_status_test.go b/pkg/cmd/rollout/rollout_status_test.go index 1cc6a2ba5..b8e904bae 100644 --- a/pkg/cmd/rollout/rollout_status_test.go +++ b/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()) + } +}