From 8d4167e7f654cd662e3caa430e321621ec67378f Mon Sep 17 00:00:00 2001 From: Jeff Lowdermilk Date: Tue, 7 Jul 2015 13:43:55 -0700 Subject: [PATCH] kubectl resource builder: don't check extension for single files `kubectl create -f filename` doesn't need to check the extension of filename. This fixes that behavior. --- examples/pod | 13 ++++++++++++ pkg/kubectl/resource/builder_test.go | 30 +++++++++++++++++++++++++--- pkg/kubectl/resource/visitor.go | 3 ++- 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 examples/pod diff --git a/examples/pod b/examples/pod new file mode 100644 index 00000000000..363381d55a7 --- /dev/null +++ b/examples/pod @@ -0,0 +1,13 @@ +# Copy of pod.yaml without file extension for test +apiVersion: v1 +kind: Pod +metadata: + name: nginx + labels: + name: nginx +spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 diff --git a/pkg/kubectl/resource/builder_test.go b/pkg/kubectl/resource/builder_test.go index df05bf9afd7..817ff9eab8b 100644 --- a/pkg/kubectl/resource/builder_test.go +++ b/pkg/kubectl/resource/builder_test.go @@ -228,7 +228,7 @@ func TestNodeBuilder(t *testing.T) { func TestPathBuilderWithMultiple(t *testing.T) { b := NewBuilder(latest.RESTMapper, api.Scheme, fakeClient()). FilenameParam(false, "../../../examples/guestbook/redis-master-controller.yaml"). - FilenameParam(false, "../../../examples/guestbook/redis-master-controller.yaml"). + FilenameParam(false, "../../../examples/pod"). NamespaceParam("test").DefaultNamespace() test := &testVisitor{} @@ -239,8 +239,12 @@ func TestPathBuilderWithMultiple(t *testing.T) { t.Fatalf("unexpected response: %v %t %#v", err, singular, test.Infos) } - info := test.Infos[1] - if info.Name != "redis-master" || info.Namespace != "test" || info.Object == nil { + info := test.Infos[0] + if _, ok := info.Object.(*api.ReplicationController); !ok || info.Name != "redis-master" || info.Namespace != "test" { + t.Errorf("unexpected info: %#v", info) + } + info = test.Infos[1] + if _, ok := info.Object.(*api.Pod); !ok || info.Name != "nginx" || info.Namespace != "test" { t.Errorf("unexpected info: %#v", info) } } @@ -687,6 +691,26 @@ func TestSingularObject(t *testing.T) { } } +func TestSingularObjectNoExtension(t *testing.T) { + obj, err := NewBuilder(latest.RESTMapper, api.Scheme, fakeClient()). + NamespaceParam("test").DefaultNamespace(). + FilenameParam(false, "../../../examples/pod"). + Flatten(). + Do().Object() + + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + pod, ok := obj.(*api.Pod) + if !ok { + t.Fatalf("unexpected object: %#v", obj) + } + if pod.Name != "nginx" || pod.Namespace != "test" { + t.Errorf("unexpected pod: %#v", pod) + } +} + func TestSingularRootScopedObject(t *testing.T) { node := &api.Node{ObjectMeta: api.ObjectMeta{Name: "test"}, Spec: api.NodeSpec{ExternalID: "test"}} r := streamTestObject(node) diff --git a/pkg/kubectl/resource/visitor.go b/pkg/kubectl/resource/visitor.go index 5e549591894..ca79b2ded5d 100644 --- a/pkg/kubectl/resource/visitor.go +++ b/pkg/kubectl/resource/visitor.go @@ -381,7 +381,8 @@ func ExpandPathsToFileVisitors(mapper *Mapper, paths string, recursive bool, ext } return nil } - if ignoreFile(path, extensions) { + // Don't check extension if the filepath was passed explicitly + if path != paths && ignoreFile(path, extensions) { return nil }