From b366afa00a30f652531d4cbbfe18151e5fb61c45 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 8 Nov 2017 21:11:54 -0500 Subject: [PATCH] Move category expander out of kubectl/resource --- hack/.golint_failures | 1 + pkg/kubectl/BUILD | 1 + pkg/kubectl/categories/BUILD | 42 +++++++++++ .../{resource => categories}/categories.go | 2 +- .../categories_test.go | 2 +- pkg/kubectl/cmd/set/BUILD | 1 + pkg/kubectl/cmd/set/set_env_test.go | 3 +- pkg/kubectl/cmd/set/set_image_test.go | 3 +- pkg/kubectl/cmd/set/set_resources_test.go | 3 +- .../cmd/set/set_serviceaccount_test.go | 3 +- pkg/kubectl/cmd/testing/BUILD | 1 + pkg/kubectl/cmd/testing/fake.go | 9 +-- pkg/kubectl/cmd/util/BUILD | 2 + pkg/kubectl/cmd/util/factory.go | 3 +- .../cmd/util/factory_object_mapping.go | 9 +-- pkg/kubectl/cmd/util/factory_test.go | 3 +- pkg/kubectl/resource/BUILD | 9 +-- pkg/kubectl/resource/builder.go | 5 +- pkg/kubectl/resource/builder_test.go | 69 ++++++++++--------- 19 files changed, 112 insertions(+), 59 deletions(-) create mode 100644 pkg/kubectl/categories/BUILD rename pkg/kubectl/{resource => categories}/categories.go (99%) rename pkg/kubectl/{resource => categories}/categories_test.go (99%) diff --git a/hack/.golint_failures b/hack/.golint_failures index 90f6c9f8a0e..b2a93bf43fc 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -140,6 +140,7 @@ pkg/kubeapiserver/authorizer/modes pkg/kubeapiserver/options pkg/kubeapiserver/server pkg/kubectl +pkg/kubectl/categories pkg/kubectl/cmd pkg/kubectl/cmd/auth pkg/kubectl/cmd/config diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index 2c6a7b2f3d5..fd1a9876c1a 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -201,6 +201,7 @@ filegroup( ":package-srcs", "//pkg/kubectl/apply:all-srcs", "//pkg/kubectl/apps:all-srcs", + "//pkg/kubectl/categories:all-srcs", "//pkg/kubectl/cmd:all-srcs", "//pkg/kubectl/explain:all-srcs", "//pkg/kubectl/metricsutil:all-srcs", diff --git a/pkg/kubectl/categories/BUILD b/pkg/kubectl/categories/BUILD new file mode 100644 index 00000000000..d26c196dd58 --- /dev/null +++ b/pkg/kubectl/categories/BUILD @@ -0,0 +1,42 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["categories.go"], + importpath = "k8s.io/kubernetes/pkg/kubectl/categories", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/client-go/discovery:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["categories_test.go"], + importpath = "k8s.io/kubernetes/pkg/kubectl/categories", + library = ":go_default_library", + deps = [ + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/version:go_default_library", + "//vendor/k8s.io/client-go/discovery:go_default_library", + "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/rest/fake:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/kubectl/resource/categories.go b/pkg/kubectl/categories/categories.go similarity index 99% rename from pkg/kubectl/resource/categories.go rename to pkg/kubectl/categories/categories.go index 1b1378b9371..4a669599af7 100644 --- a/pkg/kubectl/resource/categories.go +++ b/pkg/kubectl/categories/categories.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package resource +package categories import ( "k8s.io/apimachinery/pkg/runtime/schema" diff --git a/pkg/kubectl/resource/categories_test.go b/pkg/kubectl/categories/categories_test.go similarity index 99% rename from pkg/kubectl/resource/categories_test.go rename to pkg/kubectl/categories/categories_test.go index 7e5a6c7aed6..5344bad2242 100644 --- a/pkg/kubectl/resource/categories_test.go +++ b/pkg/kubectl/categories/categories_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package resource +package categories import ( "reflect" diff --git a/pkg/kubectl/cmd/set/BUILD b/pkg/kubectl/cmd/set/BUILD index 04a98ce07de..5e9c8e5895a 100644 --- a/pkg/kubectl/cmd/set/BUILD +++ b/pkg/kubectl/cmd/set/BUILD @@ -62,6 +62,7 @@ go_test( deps = [ "//pkg/api/testapi:go_default_library", "//pkg/apis/rbac:go_default_library", + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/resource:go_default_library", diff --git a/pkg/kubectl/cmd/set/set_env_test.go b/pkg/kubectl/cmd/set/set_env_test.go index 2c4d1455b1f..14594d039e0 100644 --- a/pkg/kubectl/cmd/set/set_env_test.go +++ b/pkg/kubectl/cmd/set/set_env_test.go @@ -39,6 +39,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -436,7 +437,7 @@ func TestSetEnvRemote(t *testing.T) { codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) tf.Printer = printers.NewVersionedPrinter(&printers.YAMLPrinter{}, testapi.Default.Converter(), *testapi.Default.GroupVersion()) tf.Namespace = "test" - tf.CategoryExpander = resource.LegacyCategoryExpander + tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ GroupVersion: groupVersion, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/set/set_image_test.go b/pkg/kubectl/cmd/set/set_image_test.go index 144d92184d2..ca27bbcdd9c 100644 --- a/pkg/kubectl/cmd/set/set_image_test.go +++ b/pkg/kubectl/cmd/set/set_image_test.go @@ -38,6 +38,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -503,7 +504,7 @@ func TestSetImageRemote(t *testing.T) { codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) tf.Printer = printers.NewVersionedPrinter(&printers.YAMLPrinter{}, testapi.Default.Converter(), *testapi.Default.GroupVersion()) tf.Namespace = "test" - tf.CategoryExpander = resource.LegacyCategoryExpander + tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ GroupVersion: groupVersion, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/set/set_resources_test.go b/pkg/kubectl/cmd/set/set_resources_test.go index dcfd89bd4d0..b82aa28e01d 100644 --- a/pkg/kubectl/cmd/set/set_resources_test.go +++ b/pkg/kubectl/cmd/set/set_resources_test.go @@ -38,6 +38,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -449,7 +450,7 @@ func TestSetResourcesRemote(t *testing.T) { mapper, typer := f.Object() tf.Printer = &printers.NamePrinter{Decoders: []runtime.Decoder{testapi.Default.Codec()}, Typer: typer, Mapper: mapper} tf.Namespace = "test" - tf.CategoryExpander = resource.LegacyCategoryExpander + tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ GroupVersion: groupVersion, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/set/set_serviceaccount_test.go b/pkg/kubectl/cmd/set/set_serviceaccount_test.go index c162d618c3a..11810cc18e6 100644 --- a/pkg/kubectl/cmd/set/set_serviceaccount_test.go +++ b/pkg/kubectl/cmd/set/set_serviceaccount_test.go @@ -38,6 +38,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -316,7 +317,7 @@ func TestSetServiceAccountRemote(t *testing.T) { codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) tf.Printer = printers.NewVersionedPrinter(&printers.YAMLPrinter{}, testapi.Default.Converter(), *testapi.Default.GroupVersion()) tf.Namespace = "test" - tf.CategoryExpander = resource.LegacyCategoryExpander + tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ GroupVersion: groupVersion, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/testing/BUILD b/pkg/kubectl/cmd/testing/BUILD index f556f1f6ff9..2758fb58389 100644 --- a/pkg/kubectl/cmd/testing/BUILD +++ b/pkg/kubectl/cmd/testing/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/kubectl:go_default_library", + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/plugins:go_default_library", diff --git a/pkg/kubectl/cmd/testing/fake.go b/pkg/kubectl/cmd/testing/fake.go index 39bf2d99823..95b5813ac86 100644 --- a/pkg/kubectl/cmd/testing/fake.go +++ b/pkg/kubectl/cmd/testing/fake.go @@ -42,6 +42,7 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/kubectl/categories" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" "k8s.io/kubernetes/pkg/kubectl/plugins" @@ -241,7 +242,7 @@ type TestFactory struct { Err error Command string TmpDir string - CategoryExpander resource.CategoryExpander + CategoryExpander categories.CategoryExpander ClientForMappingFunc func(mapping *meta.RESTMapping) (resource.RESTClient, error) UnstructuredClientForMappingFunc func(mapping *meta.RESTMapping) (resource.RESTClient, error) @@ -293,8 +294,8 @@ func (f *FakeFactory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper return expander, typer, err } -func (f *FakeFactory) CategoryExpander() resource.CategoryExpander { - return resource.LegacyCategoryExpander +func (f *FakeFactory) CategoryExpander() categories.CategoryExpander { + return categories.LegacyCategoryExpander } func (f *FakeFactory) Decoder(bool) runtime.Decoder { @@ -664,7 +665,7 @@ func (f *fakeAPIFactory) DiscoveryClient() (discovery.CachedDiscoveryInterface, return cmdutil.NewCachedDiscoveryClient(discoveryClient, cacheDir, time.Duration(10*time.Minute)), nil } -func (f *fakeAPIFactory) CategoryExpander() resource.CategoryExpander { +func (f *fakeAPIFactory) CategoryExpander() categories.CategoryExpander { if f.tf.CategoryExpander != nil { return f.tf.CategoryExpander } diff --git a/pkg/kubectl/cmd/util/BUILD b/pkg/kubectl/cmd/util/BUILD index e6fcfeead8b..bf458175abb 100644 --- a/pkg/kubectl/cmd/util/BUILD +++ b/pkg/kubectl/cmd/util/BUILD @@ -33,6 +33,7 @@ go_library( "//pkg/client/unversioned:go_default_library", "//pkg/controller:go_default_library", "//pkg/kubectl:go_default_library", + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi/validation:go_default_library", @@ -110,6 +111,7 @@ go_test( "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", "//pkg/controller:go_default_library", "//pkg/kubectl:go_default_library", + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/resource:go_default_library", "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index 73c2d891456..ddcf69ac164 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -42,6 +42,7 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/kubectl/categories" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" "k8s.io/kubernetes/pkg/kubectl/plugins" "k8s.io/kubernetes/pkg/kubectl/resource" @@ -192,7 +193,7 @@ type ObjectMappingFactory interface { // runtime.Unstructured. This performs API calls to discover types. UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper, error) // Returns interface for expanding categories like `all`. - CategoryExpander() resource.CategoryExpander + CategoryExpander() categories.CategoryExpander // Returns a RESTClient for working with the specified RESTMapping or an error. This is intended // for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer. ClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error) diff --git a/pkg/kubectl/cmd/util/factory_object_mapping.go b/pkg/kubectl/cmd/util/factory_object_mapping.go index a7cdf76039d..845aa8abecd 100644 --- a/pkg/kubectl/cmd/util/factory_object_mapping.go +++ b/pkg/kubectl/cmd/util/factory_object_mapping.go @@ -43,6 +43,7 @@ import ( client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/kubectl/categories" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" openapivalidation "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/validation" "k8s.io/kubernetes/pkg/kubectl/resource" @@ -113,17 +114,17 @@ func (f *ring1Factory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectType return expander, typer, err } -func (f *ring1Factory) CategoryExpander() resource.CategoryExpander { - legacyExpander := resource.LegacyCategoryExpander +func (f *ring1Factory) CategoryExpander() categories.CategoryExpander { + legacyExpander := categories.LegacyCategoryExpander discoveryClient, err := f.clientAccessFactory.DiscoveryClient() if err == nil { // fallback is the legacy expander wrapped with discovery based filtering - fallbackExpander, err := resource.NewDiscoveryFilteredExpander(legacyExpander, discoveryClient) + fallbackExpander, err := categories.NewDiscoveryFilteredExpander(legacyExpander, discoveryClient) CheckErr(err) // by default use the expander that discovers based on "categories" field from the API - discoveryCategoryExpander, err := resource.NewDiscoveryCategoryExpander(fallbackExpander, discoveryClient) + discoveryCategoryExpander, err := categories.NewDiscoveryCategoryExpander(fallbackExpander, discoveryClient) CheckErr(err) return discoveryCategoryExpander diff --git a/pkg/kubectl/cmd/util/factory_test.go b/pkg/kubectl/cmd/util/factory_test.go index c8f349898b1..a4c5fe4aa77 100644 --- a/pkg/kubectl/cmd/util/factory_test.go +++ b/pkg/kubectl/cmd/util/factory_test.go @@ -44,6 +44,7 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/kubectl/categories" "k8s.io/kubernetes/pkg/kubectl/resource" ) @@ -542,7 +543,7 @@ func TestDiscoveryReplaceAliases(t *testing.T) { if err != nil { t.Fatalf("Unable to create shortcut expander, err = %s", err.Error()) } - b := resource.NewBuilder(mapper, resource.LegacyCategoryExpander, legacyscheme.Scheme, fakeClient(), testapi.Default.Codec()) + b := resource.NewBuilder(mapper, categories.LegacyCategoryExpander, legacyscheme.Scheme, fakeClient(), testapi.Default.Codec()) for _, test := range tests { replaced := b.ReplaceAliases(test.arg) diff --git a/pkg/kubectl/resource/BUILD b/pkg/kubectl/resource/BUILD index ed749eb0d58..87c405fefa3 100644 --- a/pkg/kubectl/resource/BUILD +++ b/pkg/kubectl/resource/BUILD @@ -8,7 +8,6 @@ go_library( name = "go_default_library", srcs = [ "builder.go", - "categories.go", "doc.go", "helper.go", "interfaces.go", @@ -22,6 +21,7 @@ go_library( "//build/visible_to:pkg_kubectl_resource_CONSUMERS", ], deps = [ + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/validation:go_default_library", "//vendor/golang.org/x/text/encoding/unicode:go_default_library", "//vendor/golang.org/x/text/transform:go_default_library", @@ -38,7 +38,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", ], ) @@ -47,7 +46,6 @@ go_test( name = "go_default_test", srcs = [ "builder_test.go", - "categories_test.go", "helper_test.go", "visitor_test.go", ], @@ -58,9 +56,9 @@ go_test( importpath = "k8s.io/kubernetes/pkg/kubectl/resource", library = ":go_default_library", deps = [ + "//pkg/kubectl/categories:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library", - "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", @@ -73,11 +71,8 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/version:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", - "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/rest/fake:go_default_library", "//vendor/k8s.io/client-go/rest/watch:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index c9b2cfee4d8..a45c342c520 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/kubernetes/pkg/kubectl/categories" "k8s.io/kubernetes/pkg/kubectl/validation" ) @@ -44,7 +45,7 @@ const defaultHttpGetAttempts int = 3 // over using the Visitor interface. type Builder struct { mapper *Mapper - categoryExpander CategoryExpander + categoryExpander categories.CategoryExpander errs []error @@ -115,7 +116,7 @@ type resourceTuple struct { } // NewBuilder creates a builder that operates on generic objects. -func NewBuilder(mapper meta.RESTMapper, categoryExpander CategoryExpander, typer runtime.ObjectTyper, clientMapper ClientMapper, decoder runtime.Decoder) *Builder { +func NewBuilder(mapper meta.RESTMapper, categoryExpander categories.CategoryExpander, typer runtime.ObjectTyper, clientMapper ClientMapper, decoder runtime.Decoder) *Builder { return &Builder{ mapper: &Mapper{typer, mapper, clientMapper, decoder}, categoryExpander: categoryExpander, diff --git a/pkg/kubectl/resource/builder_test.go b/pkg/kubectl/resource/builder_test.go index ec21bf67f1b..b9ab9012b4c 100644 --- a/pkg/kubectl/resource/builder_test.go +++ b/pkg/kubectl/resource/builder_test.go @@ -45,6 +45,7 @@ import ( "k8s.io/client-go/rest/fake" restclientwatch "k8s.io/client-go/rest/watch" utiltesting "k8s.io/client-go/util/testing" + "k8s.io/kubernetes/pkg/kubectl/categories" "k8s.io/kubernetes/pkg/kubectl/scheme" ) @@ -262,7 +263,7 @@ var aRC string = ` ` func TestPathBuilderAndVersionedObjectNotDefaulted(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../test/fixtures/pkg/kubectl/builder/kitten-rc.yaml"}}) test := &testVisitor{} @@ -301,7 +302,7 @@ func TestNodeBuilder(t *testing.T) { w.Write([]byte(runtime.EncodeOrDie(corev1Codec, node))) }() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").Stream(r, "STDIN") test := &testVisitor{} @@ -365,7 +366,7 @@ func TestPathBuilderWithMultiple(t *testing.T) { } for _, test := range tests { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: test.recursive, Filenames: []string{test.directory}}). NamespaceParam("test").DefaultNamespace() @@ -424,7 +425,7 @@ func TestPathBuilderWithMultipleInvalid(t *testing.T) { } for _, test := range tests { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: test.recursive, Filenames: []string{test.directory}}). NamespaceParam("test").DefaultNamespace() @@ -439,7 +440,7 @@ func TestPathBuilderWithMultipleInvalid(t *testing.T) { } func TestDirectoryBuilder(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../examples/guestbook/legacy"}}). NamespaceParam("test").DefaultNamespace() @@ -470,7 +471,7 @@ func TestNamespaceOverride(t *testing.T) { })) defer s.Close() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{s.URL}}). NamespaceParam("test") @@ -481,7 +482,7 @@ func TestNamespaceOverride(t *testing.T) { t.Fatalf("unexpected response: %v %#v", err, test.Infos) } - b = NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b = NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(true, &FilenameOptions{Recursive: false, Filenames: []string{s.URL}}). NamespaceParam("test") @@ -501,7 +502,7 @@ func TestURLBuilder(t *testing.T) { })) defer s.Close() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{s.URL}}). NamespaceParam("foo") @@ -530,7 +531,7 @@ func TestURLBuilderRequireNamespace(t *testing.T) { })) defer s.Close() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{s.URL}}). NamespaceParam("test").RequireNamespace() @@ -545,7 +546,7 @@ func TestURLBuilderRequireNamespace(t *testing.T) { func TestResourceByName(t *testing.T) { pods, _ := testData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, &pods.Items[0]), }), corev1Codec). NamespaceParam("test") @@ -578,7 +579,7 @@ func TestResourceByName(t *testing.T) { func TestMultipleResourceByTheSameName(t *testing.T) { pods, svcs := testData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, &pods.Items[0]), "/namespaces/test/pods/baz": runtime.EncodeOrDie(corev1Codec, &pods.Items[1]), "/namespaces/test/services/foo": runtime.EncodeOrDie(corev1Codec, &svcs.Items[0]), @@ -610,7 +611,7 @@ func TestMultipleResourceByTheSameName(t *testing.T) { func TestResourceNames(t *testing.T) { pods, svc := testData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, &pods.Items[0]), "/namespaces/test/services/baz": runtime.EncodeOrDie(corev1Codec, &svc.Items[0]), }), corev1Codec). @@ -638,7 +639,7 @@ func TestResourceNames(t *testing.T) { func TestResourceNamesWithoutResource(t *testing.T) { pods, svc := testData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, &pods.Items[0]), "/namespaces/test/services/baz": runtime.EncodeOrDie(corev1Codec, &svc.Items[0]), }), corev1Codec). @@ -659,7 +660,7 @@ func TestResourceNamesWithoutResource(t *testing.T) { } func TestResourceByNameWithoutRequireObject(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{}), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{}), corev1Codec). NamespaceParam("test") test := &testVisitor{} @@ -693,7 +694,7 @@ func TestResourceByNameWithoutRequireObject(t *testing.T) { func TestResourceByNameAndEmptySelector(t *testing.T) { pods, _ := testData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, &pods.Items[0]), }), corev1Codec). NamespaceParam("test"). @@ -721,7 +722,7 @@ func TestResourceByNameAndEmptySelector(t *testing.T) { func TestLabelSelector(t *testing.T) { pods, svc := testData() labelKey := metav1.LabelSelectorQueryParam(corev1GV.String()) - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods?" + labelKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, pods), "/namespaces/test/services?" + labelKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, svc), }), corev1Codec). @@ -752,7 +753,7 @@ func TestLabelSelector(t *testing.T) { } func TestLabelSelectorRequiresKnownTypes(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). LabelSelectorParam("a=b"). NamespaceParam("test"). ResourceTypes("unknown") @@ -765,7 +766,7 @@ func TestLabelSelectorRequiresKnownTypes(t *testing.T) { func TestFieldSelector(t *testing.T) { pods, svc := testData() fieldKey := metav1.FieldSelectorQueryParam(corev1GV.String()) - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods?" + fieldKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, pods), "/namespaces/test/services?" + fieldKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, svc), }), corev1Codec). @@ -796,7 +797,7 @@ func TestFieldSelector(t *testing.T) { } func TestFieldSelectorRequiresKnownTypes(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). FieldSelectorParam("a=b"). NamespaceParam("test"). ResourceTypes("unknown") @@ -807,7 +808,7 @@ func TestFieldSelectorRequiresKnownTypes(t *testing.T) { } func TestSingleResourceType(t *testing.T) { - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). LabelSelectorParam("a=b"). SingleResourceType(). ResourceTypeOrNameArgs(true, "pods,services") @@ -877,7 +878,7 @@ func TestResourceTuple(t *testing.T) { } } - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith(k, t, expectedRequests), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith(k, t, expectedRequests), corev1Codec). NamespaceParam("test").DefaultNamespace(). ResourceTypeOrNameArgs(true, testCase.args...).RequireObject(requireObject) @@ -908,7 +909,7 @@ func TestResourceTuple(t *testing.T) { func TestStream(t *testing.T) { r, pods, rc := streamTestData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").Stream(r, "STDIN").Flatten() test := &testVisitor{} @@ -925,7 +926,7 @@ func TestStream(t *testing.T) { func TestYAMLStream(t *testing.T) { r, pods, rc := streamYAMLTestData() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").Stream(r, "STDIN").Flatten() test := &testVisitor{} @@ -942,7 +943,7 @@ func TestYAMLStream(t *testing.T) { func TestMultipleObject(t *testing.T) { r, pods, svc := streamTestData() - obj, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + obj, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").Stream(r, "STDIN").Flatten(). Do().Object() @@ -964,7 +965,7 @@ func TestMultipleObject(t *testing.T) { func TestContinueOnErrorVisitor(t *testing.T) { r, _, _ := streamTestData() - req := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + req := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). ContinueOnError(). NamespaceParam("test").Stream(r, "STDIN").Flatten(). Do() @@ -993,7 +994,7 @@ func TestContinueOnErrorVisitor(t *testing.T) { } func TestSingleItemImpliedObject(t *testing.T) { - obj, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + obj, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").DefaultNamespace(). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../examples/guestbook/legacy/redis-master-controller.yaml"}}). Flatten(). @@ -1013,7 +1014,7 @@ func TestSingleItemImpliedObject(t *testing.T) { } func TestSingleItemImpliedObjectNoExtension(t *testing.T) { - obj, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + obj, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").DefaultNamespace(). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../examples/pod"}}). Flatten(). @@ -1035,7 +1036,7 @@ func TestSingleItemImpliedObjectNoExtension(t *testing.T) { func TestSingleItemImpliedRootScopedObject(t *testing.T) { node := &v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "test"}, Spec: v1.NodeSpec{ExternalID: "test"}} r := streamTestObject(node) - infos, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + infos, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").DefaultNamespace(). Stream(r, "STDIN"). Flatten(). @@ -1060,7 +1061,7 @@ func TestSingleItemImpliedRootScopedObject(t *testing.T) { func TestListObject(t *testing.T) { pods, _ := testData() labelKey := metav1.LabelSelectorQueryParam(corev1GV.String()) - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods?" + labelKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, pods), }), corev1Codec). LabelSelectorParam("a=b"). @@ -1093,7 +1094,7 @@ func TestListObject(t *testing.T) { func TestListObjectWithDifferentVersions(t *testing.T) { pods, svc := testData() labelKey := metav1.LabelSelectorQueryParam(corev1GV.String()) - obj, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + obj, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods?" + labelKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, pods), "/namespaces/test/services?" + labelKey + "=a%3Db": runtime.EncodeOrDie(corev1Codec, svc), }), corev1Codec). @@ -1119,7 +1120,7 @@ func TestListObjectWithDifferentVersions(t *testing.T) { func TestWatch(t *testing.T) { _, svc := testData() - w, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + w, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/services?fieldSelector=metadata.name%3Dredis-master&resourceVersion=12&watch=true": watchBody(watch.Event{ Type: watch.Added, Object: &svc.Items[0], @@ -1151,7 +1152,7 @@ func TestWatch(t *testing.T) { } func TestWatchMultipleError(t *testing.T) { - _, err := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + _, err := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). NamespaceParam("test").DefaultNamespace(). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../examples/guestbook/legacy/redis-master-controller.yaml"}}).Flatten(). FilenameParam(false, &FilenameOptions{Recursive: false, Filenames: []string{"../../../examples/guestbook/legacy/redis-master-controller.yaml"}}).Flatten(). @@ -1174,7 +1175,7 @@ func TestLatest(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "baz", Namespace: "test", ResourceVersion: "15"}, } - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClientWith("", t, map[string]string{ "/namespaces/test/pods/foo": runtime.EncodeOrDie(corev1Codec, newPod), "/namespaces/test/pods/bar": runtime.EncodeOrDie(corev1Codec, newPod2), "/namespaces/test/services/baz": runtime.EncodeOrDie(corev1Codec, newSvc), @@ -1210,7 +1211,7 @@ func TestReceiveMultipleErrors(t *testing.T) { w2.Write([]byte(runtime.EncodeOrDie(corev1Codec, &svc.Items[0]))) }() - b := NewBuilder(restmapper, LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). + b := NewBuilder(restmapper, categories.LegacyCategoryExpander, scheme.Scheme, fakeClient(), corev1Codec). Stream(r, "1").Stream(r2, "2"). ContinueOnError()