diff --git a/hack/make-rules/test-cmd.sh b/hack/make-rules/test-cmd.sh index 6ab1e26edf..ec75f70e41 100755 --- a/hack/make-rules/test-cmd.sh +++ b/hack/make-rules/test-cmd.sh @@ -1548,9 +1548,9 @@ __EOF__ # Clean up kubectl delete namespace my-namespace - ############## + ###################### # Pods in Namespaces # - ############## + ###################### ### Create a new namespace # Pre-condition: the other namespace does not exist @@ -1569,6 +1569,9 @@ __EOF__ kube::test::get_object_assert 'pods --namespace=other' "{{range.items}}{{$id_field}}:{{end}}" 'valid-pod:' # Post-condition: verify shorthand `-n other` has the same results as `--namespace=other` kube::test::get_object_assert 'pods -n other' "{{range.items}}{{$id_field}}:{{end}}" 'valid-pod:' + # Post-condition: a resource cannot be retrieved by name across all namespaces + output_message=$(! kubectl get "${kube_flags[@]}" pod valid-pod --all-namespaces 2>&1) + kube::test::if_has_string "${output_message}" "a resource cannot be retrieved by name across all namespaces" ### Delete POD valid-pod in specific namespace # Pre-condition: valid-pod POD exists @@ -1580,9 +1583,9 @@ __EOF__ # Clean up kubectl delete namespace other - ############## + ########### # Secrets # - ############## + ########### ### Create a new namespace # Pre-condition: the test-secrets namespace does not exist diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index ad7f399e79..0f8869adb1 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -55,8 +55,9 @@ type Builder struct { resources []string - namespace string - names []string + namespace string + allNamespace bool + names []string resourceTuples []resourceTuple @@ -296,6 +297,7 @@ func (b *Builder) AllNamespaces(allNamespace bool) *Builder { if allNamespace { b.namespace = api.NamespaceAll } + b.allNamespace = allNamespace return b } @@ -644,7 +646,11 @@ func (b *Builder) visitByResource() *Result { selectorNamespace = "" } else { if len(b.namespace) == 0 { - return &Result{singular: isSingular, err: fmt.Errorf("namespace may not be empty when retrieving a resource by name")} + errMsg := "namespace may not be empty when retrieving a resource by name" + if b.allNamespace { + errMsg = "a resource cannot be retrieved by name across all namespaces" + } + return &Result{singular: isSingular, err: fmt.Errorf(errMsg)} } } @@ -690,7 +696,11 @@ func (b *Builder) visitByName() *Result { selectorNamespace = "" } else { if len(b.namespace) == 0 { - return &Result{singular: isSingular, err: fmt.Errorf("namespace may not be empty when retrieving a resource by name")} + errMsg := "namespace may not be empty when retrieving a resource by name" + if b.allNamespace { + errMsg = "a resource cannot be retrieved by name across all namespaces" + } + return &Result{singular: isSingular, err: fmt.Errorf(errMsg)} } }