From 67d929a3d248fc6ad1a9435d07ffb2ef1a1e0f76 Mon Sep 17 00:00:00 2001 From: Andy Goldstein Date: Thu, 30 Jun 2016 11:23:48 -0400 Subject: [PATCH] Return immediately for singular get on error Return immediately when attempting to get a singular resource that isn't found, so that we avoid printing out a List if the output format is something like json or yaml. Before: ``` $ kubectl get pod/foo -o yaml apiVersion: v1 items: [] kind: List metadata: {} pods "foo" not found ``` After: ``` $ kubectl get pod/foo -o yaml pods "foo" not found ``` --- hack/test-cmd.sh | 14 ++++++++++++++ pkg/kubectl/cmd/get.go | 3 +++ 2 files changed, 17 insertions(+) diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 02f51e7e8a7..16ae002227a 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -975,6 +975,20 @@ __EOF__ # Post-condition: POD abc should error since it doesn't exist kube::test::if_has_string "${output_message}" 'pods "abc" not found' + ### Test retrieval of non-existing POD with json output flag specified + # Pre-condition: no POD exists + kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' + # Command + output_message=$(! kubectl get pods abc 2>&1 "${kube_flags[@]}" -o json) + # Post-condition: POD abc should error since it doesn't exist + kube::test::if_has_string "${output_message}" 'pods "abc" not found' + # Post-condition: make sure we don't display an empty List + if kube::test::if_has_string "${output_message}" 'List'; then + echo 'Unexpected List output' + echo "${LINENO} $(basename $0)" + exit 1 + fi + ##################################### # Third Party Resources # ##################################### diff --git a/pkg/kubectl/cmd/get.go b/pkg/kubectl/cmd/get.go index 3aab52515f1..8757f63f05e 100644 --- a/pkg/kubectl/cmd/get.go +++ b/pkg/kubectl/cmd/get.go @@ -232,6 +232,9 @@ func RunGet(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string singular := false infos, err := r.IntoSingular(&singular).Infos() if err != nil { + if singular { + return err + } allErrs = append(allErrs, err) }