From ccdc20d90c0e33aa3f8a55ee17e413a500dcce39 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 14 Jan 2015 13:06:53 -0500 Subject: [PATCH] Ignore empty objects from streams and error when nothing passed to create Passing zero objects to create should be an error --- hack/test-cmd.sh | 10 +++++----- pkg/kubectl/cmd/create.go | 5 +++++ pkg/kubectl/resource/visitor.go | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 9feed5754c9..dc992a75dc2 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -115,6 +115,9 @@ for version in "${kube_api_versions[@]}"; do [ "$(kubectl get minions -t $'{{ .apiVersion }}' "${kube_flags[@]}")" == "${version}" ] fi + # passing no arguments to create is an error + [ ! $(kubectl create) ] + kube::log::status "Testing kubectl(${version}:pods)" kubectl get pods "${kube_flags[@]}" kubectl create -f examples/guestbook/redis-master.json "${kube_flags[@]}" @@ -144,14 +147,11 @@ for version in "${kube_api_versions[@]}"; do "apiVersion": "v1beta1", "id": "service-${version}-test", "port": 80, - "protocol": "TCP", - "labels": { - "name": "${version}" - } + "protocol": "TCP" } __EOF__ - kubectl get services "something-${version}" "${kube_flags[@]}" kubectl get services "${kube_flags[@]}" + kubectl get services "service-${version}-test" "${kube_flags[@]}" kubectl delete service frontend "${kube_flags[@]}" kube::log::status "Testing kubectl(${version}:replicationcontrollers)" diff --git a/pkg/kubectl/cmd/create.go b/pkg/kubectl/cmd/create.go index 8705dda2767..ea97f8ae60e 100644 --- a/pkg/kubectl/cmd/create.go +++ b/pkg/kubectl/cmd/create.go @@ -55,6 +55,7 @@ Examples: Flatten(). Do() + count := 0 err = r.Visit(func(info *resource.Info) error { data, err := info.Mapping.Codec.Encode(info.Object) if err != nil { @@ -66,11 +67,15 @@ Examples: if err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, data); err != nil { return err } + count++ // TODO: if generation of names added to server side, change this to use the server's name fmt.Fprintf(out, "%s\n", info.Name) return nil }) checkErr(err) + if count == 0 { + checkErr(fmt.Errorf("no objects passed to create")) + } }, } cmd.Flags().VarP(&flags.Filenames, "filename", "f", "Filename, directory, or URL to file to use to create the resource") diff --git a/pkg/kubectl/resource/visitor.go b/pkg/kubectl/resource/visitor.go index 46b2e0c74a2..368a44cfd27 100644 --- a/pkg/kubectl/resource/visitor.go +++ b/pkg/kubectl/resource/visitor.go @@ -17,6 +17,7 @@ limitations under the License. package resource import ( + "bytes" "fmt" "io" "io/ioutil" @@ -356,6 +357,10 @@ func (v *StreamVisitor) Visit(fn VisitorFunc) error { } return err } + ext.RawJSON = bytes.TrimSpace(ext.RawJSON) + if len(ext.RawJSON) == 0 || bytes.Equal(ext.RawJSON, []byte("null")) { + continue + } info, err := v.InfoForData(ext.RawJSON, v.Source) if err != nil { if v.IgnoreErrors {