From 682e028516744194dda3f62cb5b935af173e35bc Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 7 May 2018 15:25:40 -0400 Subject: [PATCH 1/3] stop pretending that we have statically known shortcuts --- pkg/kubectl/BUILD | 1 - pkg/kubectl/cmd/apply_test.go | 8 +- pkg/kubectl/cmd/autoscale.go | 4 +- pkg/kubectl/cmd/expose.go | 3 +- pkg/kubectl/cmd/rollout/rollout_history.go | 5 +- pkg/kubectl/cmd/rollout/rollout_pause.go | 5 +- pkg/kubectl/cmd/rollout/rollout_resume.go | 5 +- pkg/kubectl/cmd/rollout/rollout_status.go | 4 +- pkg/kubectl/cmd/rollout/rollout_undo.go | 4 +- pkg/kubectl/cmd/scale.go | 4 +- pkg/kubectl/cmd/taint.go | 7 +- pkg/kubectl/cmd/util/shortcut_restmapper.go | 16 +- pkg/kubectl/kubectl.go | 184 -------------------- 13 files changed, 24 insertions(+), 226 deletions(-) delete mode 100644 pkg/kubectl/kubectl.go diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index e20cb894a85..d0cda5d3513 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -98,7 +98,6 @@ go_library( "generate.go", "history.go", "interfaces.go", - "kubectl.go", "namespace.go", "pdb.go", "priorityclass.go", diff --git a/pkg/kubectl/cmd/apply_test.go b/pkg/kubectl/cmd/apply_test.go index 7df056ddba1..5b92a1597d0 100644 --- a/pkg/kubectl/cmd/apply_test.go +++ b/pkg/kubectl/cmd/apply_test.go @@ -359,7 +359,7 @@ func TestRunApplyViewLastApplied(t *testing.T) { expectedErr: "error: Unexpected -o output mode: wide, the flag 'output' must be one of yaml|json\nSee 'view-last-applied -h' for help and examples.", expectedOut: "", selector: "", - args: []string{"rc", "test-rc"}, + args: []string{"replicationcontroller", "test-rc"}, respBytes: rcBytesWithConfig, }, { @@ -369,7 +369,7 @@ func TestRunApplyViewLastApplied(t *testing.T) { expectedErr: "", expectedOut: "test: 1234\n", selector: "name=test-rc", - args: []string{"rc"}, + args: []string{"replicationcontroller"}, respBytes: rcBytesWithConfig, }, { @@ -379,7 +379,7 @@ func TestRunApplyViewLastApplied(t *testing.T) { expectedErr: "error: no last-applied-configuration annotation found on resource: test-rc", expectedOut: "", selector: "", - args: []string{"rc", "test-rc"}, + args: []string{"replicationcontroller", "test-rc"}, respBytes: rcBytes, }, { @@ -389,7 +389,7 @@ func TestRunApplyViewLastApplied(t *testing.T) { expectedErr: "Error from server (NotFound): the server could not find the requested resource (get replicationcontrollers no-match)", expectedOut: "", selector: "", - args: []string{"rc", "no-match"}, + args: []string{"replicationcontroller", "no-match"}, respBytes: nil, }, } diff --git a/pkg/kubectl/cmd/autoscale.go b/pkg/kubectl/cmd/autoscale.go index a4a4aba2c09..ff0f1057c48 100644 --- a/pkg/kubectl/cmd/autoscale.go +++ b/pkg/kubectl/cmd/autoscale.go @@ -95,7 +95,6 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) * o := NewAutoscaleOptions(ioStreams) validArgs := []string{"deployment", "replicaset", "replicationcontroller"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU]", @@ -108,8 +107,7 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) * cmdutil.CheckErr(o.Validate()) cmdutil.CheckErr(o.Run()) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } // bind flag structs diff --git a/pkg/kubectl/cmd/expose.go b/pkg/kubectl/cmd/expose.go index 59f7bb70abd..7c1a57a4734 100644 --- a/pkg/kubectl/cmd/expose.go +++ b/pkg/kubectl/cmd/expose.go @@ -136,8 +136,7 @@ func NewCmdExposeService(f cmdutil.Factory, streams genericclioptions.IOStreams) cmdutil.CheckErr(o.Complete(f, cmd)) cmdutil.CheckErr(o.RunExpose(cmd, args)) }, - ValidArgs: validArgs, - ArgAliases: kubectl.ResourceAliases(validArgs), + ValidArgs: validArgs, } o.RecordFlags.AddFlags(cmd) diff --git a/pkg/kubectl/cmd/rollout/rollout_history.go b/pkg/kubectl/cmd/rollout/rollout_history.go index e42f3b8a4fb..9cb7ce72338 100644 --- a/pkg/kubectl/cmd/rollout/rollout_history.go +++ b/pkg/kubectl/cmd/rollout/rollout_history.go @@ -21,7 +21,6 @@ import ( "io" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" @@ -46,7 +45,6 @@ func NewCmdRolloutHistory(f cmdutil.Factory, out io.Writer) *cobra.Command { options := &resource.FilenameOptions{} validArgs := []string{"deployment", "daemonset", "statefulset"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "history (TYPE NAME | TYPE/NAME) [flags]", @@ -57,8 +55,7 @@ func NewCmdRolloutHistory(f cmdutil.Factory, out io.Writer) *cobra.Command { Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(RunHistory(f, cmd, out, args, options)) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } cmd.Flags().Int64("revision", 0, "See the details, including podTemplate of the revision specified") diff --git a/pkg/kubectl/cmd/rollout/rollout_pause.go b/pkg/kubectl/cmd/rollout/rollout_pause.go index eb4a4b1662e..5df4c0a5faa 100644 --- a/pkg/kubectl/cmd/rollout/rollout_pause.go +++ b/pkg/kubectl/cmd/rollout/rollout_pause.go @@ -24,7 +24,6 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/set" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -69,7 +68,6 @@ func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) } validArgs := []string{"deployment"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "pause RESOURCE", @@ -89,8 +87,7 @@ func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) } cmdutil.CheckErr(utilerrors.Flatten(utilerrors.NewAggregate(allErrs))) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } usage := "identifying the resource to get from a server." diff --git a/pkg/kubectl/cmd/rollout/rollout_resume.go b/pkg/kubectl/cmd/rollout/rollout_resume.go index ee28ef9db93..2263df865c7 100644 --- a/pkg/kubectl/cmd/rollout/rollout_resume.go +++ b/pkg/kubectl/cmd/rollout/rollout_resume.go @@ -24,7 +24,6 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/set" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -67,7 +66,6 @@ func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) } validArgs := []string{"deployment"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "resume RESOURCE", @@ -87,8 +85,7 @@ func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) } cmdutil.CheckErr(utilerrors.Flatten(utilerrors.NewAggregate(allErrs))) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } usage := "identifying the resource to get from a server." diff --git a/pkg/kubectl/cmd/rollout/rollout_status.go b/pkg/kubectl/cmd/rollout/rollout_status.go index e6e46a44220..532f85827ab 100644 --- a/pkg/kubectl/cmd/rollout/rollout_status.go +++ b/pkg/kubectl/cmd/rollout/rollout_status.go @@ -77,7 +77,6 @@ func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) o := NewRolloutStatusOptions(streams) validArgs := []string{"deployment", "daemonset", "statefulset"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "status (TYPE NAME | TYPE/NAME) [flags]", @@ -90,8 +89,7 @@ func NewCmdRolloutStatus(f cmdutil.Factory, streams genericclioptions.IOStreams) cmdutil.CheckErr(o.Validate(cmd, args)) cmdutil.CheckErr(o.Run()) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } usage := "identifying the resource to get from a server." diff --git a/pkg/kubectl/cmd/rollout/rollout_undo.go b/pkg/kubectl/cmd/rollout/rollout_undo.go index b8c07afc4b1..6a8443fcc38 100644 --- a/pkg/kubectl/cmd/rollout/rollout_undo.go +++ b/pkg/kubectl/cmd/rollout/rollout_undo.go @@ -68,7 +68,6 @@ func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command { } validArgs := []string{"deployment", "daemonset", "statefulset"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "undo (TYPE NAME | TYPE/NAME) [flags]", @@ -88,8 +87,7 @@ func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command { } cmdutil.CheckErr(utilerrors.Flatten(utilerrors.NewAggregate(allErrs))) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } cmd.Flags().Int64("to-revision", 0, "The revision to rollback to. Default to 0 (last revision).") diff --git a/pkg/kubectl/cmd/scale.go b/pkg/kubectl/cmd/scale.go index 8bb1d7809e3..b6cbfca442e 100644 --- a/pkg/kubectl/cmd/scale.go +++ b/pkg/kubectl/cmd/scale.go @@ -114,7 +114,6 @@ func NewCmdScale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobr o := NewScaleOptions(ioStreams) validArgs := []string{"deployment", "replicaset", "replicationcontroller", "statefulset"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)", @@ -127,8 +126,7 @@ func NewCmdScale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobr cmdutil.CheckErr(o.Validate(cmd)) cmdutil.CheckErr(o.RunScale()) }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } o.RecordFlags.AddFlags(cmd) diff --git a/pkg/kubectl/cmd/taint.go b/pkg/kubectl/cmd/taint.go index 84b381aa805..ab0a499012e 100644 --- a/pkg/kubectl/cmd/taint.go +++ b/pkg/kubectl/cmd/taint.go @@ -32,7 +32,6 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" @@ -93,7 +92,6 @@ func NewCmdTaint(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra. } validArgs := []string{"node"} - argAliases := kubectl.ResourceAliases(validArgs) cmd := &cobra.Command{ Use: "taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N", @@ -112,8 +110,7 @@ func NewCmdTaint(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra. cmdutil.CheckErr(err) } }, - ValidArgs: validArgs, - ArgAliases: argAliases, + ValidArgs: validArgs, } options.PrintFlags.AddFlags(cmd) @@ -212,7 +209,7 @@ func (o TaintOptions) validateFlags() error { // Validate checks to the TaintOptions to see if there is sufficient information run the command. func (o TaintOptions) Validate() error { resourceType := strings.ToLower(o.resources[0]) - validResources, isValidResource := append(kubectl.ResourceAliases([]string{"node"}), "node"), false + validResources, isValidResource := []string{"node", "nodes"}, false for _, validResource := range validResources { if resourceType == validResource { isValidResource = true diff --git a/pkg/kubectl/cmd/util/shortcut_restmapper.go b/pkg/kubectl/cmd/util/shortcut_restmapper.go index 2ef8ce02bd6..8d19cd324ec 100644 --- a/pkg/kubectl/cmd/util/shortcut_restmapper.go +++ b/pkg/kubectl/cmd/util/shortcut_restmapper.go @@ -25,7 +25,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/discovery" - "k8s.io/kubernetes/pkg/kubectl" ) // shortcutExpander is a RESTMapper that can be used for Kubernetes resources. It expands the resource first, then invokes the wrapped @@ -73,8 +72,8 @@ func (e shortcutExpander) RESTMappings(gk schema.GroupKind, versions ...string) // First the list of potential resources will be taken from the API server. // Next we will append the hardcoded list of resources - to be backward compatible with old servers. // NOTE that the list is ordered by group priority. -func (e shortcutExpander) getShortcutMappings() ([]*metav1.APIResourceList, []kubectl.ResourceShortcuts, error) { - res := []kubectl.ResourceShortcuts{} +func (e shortcutExpander) getShortcutMappings() ([]*metav1.APIResourceList, []resourceShortcuts, error) { + res := []resourceShortcuts{} // get server resources // This can return an error *and* the results it was able to find. We don't need to fail on the error. apiResList, err := e.discoveryClient.ServerResources() @@ -89,7 +88,7 @@ func (e shortcutExpander) getShortcutMappings() ([]*metav1.APIResourceList, []ku } for _, apiRes := range apiResources.APIResources { for _, shortName := range apiRes.ShortNames { - rs := kubectl.ResourceShortcuts{ + rs := resourceShortcuts{ ShortForm: schema.GroupResource{Group: gv.Group, Resource: shortName}, LongForm: schema.GroupResource{Group: gv.Group, Resource: apiRes.Name}, } @@ -98,8 +97,6 @@ func (e shortcutExpander) getShortcutMappings() ([]*metav1.APIResourceList, []ku } } - // append hardcoded short forms at the end of the list - res = append(res, kubectl.ResourcesShortcutStatic...) return apiResList, res, nil } @@ -158,3 +155,10 @@ func (e shortcutExpander) expandResourceShortcut(resource schema.GroupVersionRes return resource } + +// ResourceShortcuts represents a structure that holds the information how to +// transition from resource's shortcut to its full name. +type resourceShortcuts struct { + ShortForm schema.GroupResource + LongForm schema.GroupResource +} diff --git a/pkg/kubectl/kubectl.go b/pkg/kubectl/kubectl.go deleted file mode 100644 index 9b29eaaf80d..00000000000 --- a/pkg/kubectl/kubectl.go +++ /dev/null @@ -1,184 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// A set of common functions needed by cmd/kubectl and pkg/kubectl packages. -package kubectl - -import ( - "strings" - - "k8s.io/apimachinery/pkg/runtime/schema" -) - -type NamespaceInfo struct { - Namespace string -} - -// ResourceShortcuts represents a structure that holds the information how to -// transition from resource's shortcut to its full name. -type ResourceShortcuts struct { - ShortForm schema.GroupResource - LongForm schema.GroupResource -} - -// ResourcesShortcutStatic is the list of short names to their expanded names. -// Note that the list is ordered by group. -var ResourcesShortcutStatic = []ResourceShortcuts{ - // If you add an entry here, please also take a look at pkg/kubectl/cmd/cmd.go - // and add an entry to valid_resources when appropriate. - { - ShortForm: schema.GroupResource{Resource: "cm"}, - LongForm: schema.GroupResource{Resource: "configmaps"}, - }, - { - ShortForm: schema.GroupResource{Resource: "cs"}, - LongForm: schema.GroupResource{Resource: "componentstatuses"}, - }, - { - ShortForm: schema.GroupResource{Resource: "ep"}, - LongForm: schema.GroupResource{Resource: "endpoints"}, - }, - { - ShortForm: schema.GroupResource{Resource: "ev"}, - LongForm: schema.GroupResource{Resource: "events"}, - }, - { - ShortForm: schema.GroupResource{Resource: "limits"}, - LongForm: schema.GroupResource{Resource: "limitranges"}, - }, - { - ShortForm: schema.GroupResource{Resource: "no"}, - LongForm: schema.GroupResource{Resource: "nodes"}, - }, - { - ShortForm: schema.GroupResource{Resource: "ns"}, - LongForm: schema.GroupResource{Resource: "namespaces"}, - }, - { - ShortForm: schema.GroupResource{Resource: "po"}, - LongForm: schema.GroupResource{Resource: "pods"}, - }, - { - ShortForm: schema.GroupResource{Resource: "pvc"}, - LongForm: schema.GroupResource{Resource: "persistentvolumeclaims"}, - }, - { - ShortForm: schema.GroupResource{Resource: "pv"}, - LongForm: schema.GroupResource{Resource: "persistentvolumes"}, - }, - { - ShortForm: schema.GroupResource{Resource: "quota"}, - LongForm: schema.GroupResource{Resource: "resourcequotas"}, - }, - { - ShortForm: schema.GroupResource{Resource: "rc"}, - LongForm: schema.GroupResource{Resource: "replicationcontrollers"}, - }, - { - ShortForm: schema.GroupResource{Resource: "rs"}, - LongForm: schema.GroupResource{Resource: "replicasets"}, - }, - { - ShortForm: schema.GroupResource{Resource: "sa"}, - LongForm: schema.GroupResource{Resource: "serviceaccounts"}, - }, - { - ShortForm: schema.GroupResource{Resource: "svc"}, - LongForm: schema.GroupResource{Resource: "services"}, - }, - { - ShortForm: schema.GroupResource{Group: "autoscaling", Resource: "hpa"}, - LongForm: schema.GroupResource{Group: "autoscaling", Resource: "horizontalpodautoscalers"}, - }, - { - ShortForm: schema.GroupResource{Group: "certificates.k8s.io", Resource: "csr"}, - LongForm: schema.GroupResource{Group: "certificates.k8s.io", Resource: "certificatesigningrequests"}, - }, - { - ShortForm: schema.GroupResource{Group: "policy", Resource: "pdb"}, - LongForm: schema.GroupResource{Group: "policy", Resource: "poddisruptionbudgets"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "deploy"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "deployments"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "ds"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "daemonsets"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "hpa"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "horizontalpodautoscalers"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "ing"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "ingresses"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "netpol"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "networkpolicies"}, - }, - { - ShortForm: schema.GroupResource{Group: "extensions", Resource: "psp"}, - LongForm: schema.GroupResource{Group: "extensions", Resource: "podSecurityPolicies"}, - }, -} - -// ResourceShortFormFor looks up for a short form of resource names. -// TODO: Change the signature of this function so that it can -// make use of ResourceShortcuts. -func ResourceShortFormFor(resource string) (string, bool) { - var alias string - exists := false - for _, item := range ResourcesShortcutStatic { - if item.LongForm.Resource == resource { - alias = item.ShortForm.Resource - exists = true - break - } - } - return alias, exists -} - -// ResourceAliases returns the resource shortcuts and plural forms for the given resources. -func ResourceAliases(rs []string) []string { - as := make([]string, 0, len(rs)) - plurals := make(map[string]struct{}, len(rs)) - for _, r := range rs { - var plural string - switch { - case r == "endpoints": - // Endpoints type itself is plural, unlike every other resource. - plural = r - case strings.HasSuffix(r, "y"): - plural = r[0:len(r)-1] + "ies" - case strings.HasSuffix(r, "s"): - plural = r + "es" - default: - plural = r + "s" - } - as = append(as, plural) - - plurals[plural] = struct{}{} - } - - for _, item := range ResourcesShortcutStatic { - if _, found := plurals[item.LongForm.Resource]; found { - as = append(as, item.ShortForm.Resource) - } - } - return as -} From dd97a7bc59c913c71730dba8b8de274820466417 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 7 May 2018 15:41:13 -0400 Subject: [PATCH 2/3] move client based restmappers to client-go --- cmd/kube-apiserver/app/BUILD | 2 +- cmd/kube-apiserver/app/server.go | 4 +- cmd/kube-controller-manager/app/BUILD | 2 +- .../app/controllermanager.go | 6 +- pkg/kubectl/cmd/testing/BUILD | 1 + pkg/kubectl/cmd/testing/fake.go | 9 +- pkg/kubectl/cmd/util/BUILD | 4 +- .../cmd/util/factory_object_mapping.go | 6 +- pkg/kubectl/cmd/util/factory_test.go | 3 +- staging/BUILD | 1 + .../pkg/apiserver/customresource_handler.go | 2 +- .../pkg/registry/customresource/etcd_test.go | 2 +- .../test/integration/testserver/BUILD | 1 + .../test/integration/testserver/resources.go | 5 +- staging/src/k8s.io/client-go/discovery/BUILD | 12 +- .../client-go/discovery/unstructured.go | 24 +-- staging/src/k8s.io/client-go/restmapper/BUILD | 53 +++++++ .../restmapper.go => restmapper/discovery.go} | 15 +- .../discovery_test.go} | 4 +- .../k8s.io/client-go/restmapper/shortcut.go | 12 +- .../client-go/restmapper/shortcut_test.go | 141 +++++++++++++++--- staging/src/k8s.io/client-go/scale/BUILD | 2 +- .../src/k8s.io/client-go/scale/client_test.go | 6 +- test/e2e/framework/BUILD | 1 + test/e2e/framework/framework.go | 3 +- test/e2e/scalability/BUILD | 1 + test/e2e/scalability/load.go | 3 +- test/integration/etcd/BUILD | 2 +- .../etcd/etcd_storage_path_test.go | 8 +- test/integration/garbagecollector/BUILD | 2 +- .../garbage_collector_test.go | 4 +- 31 files changed, 240 insertions(+), 101 deletions(-) create mode 100644 staging/src/k8s.io/client-go/restmapper/BUILD rename staging/src/k8s.io/client-go/{discovery/restmapper.go => restmapper/discovery.go} (95%) rename staging/src/k8s.io/client-go/{discovery/restmapper_test.go => restmapper/discovery_test.go} (99%) rename pkg/kubectl/cmd/util/shortcut_restmapper.go => staging/src/k8s.io/client-go/restmapper/shortcut.go (93%) rename pkg/kubectl/cmd/util/shortcut_restmapper_test.go => staging/src/k8s.io/client-go/restmapper/shortcut_test.go (56%) diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index 5e37b561d0f..9ea3abbf64e 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -78,11 +78,11 @@ go_library( "//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/etcd3/preflight:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/cached:go_default_library", "//vendor/k8s.io/client-go/informers:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/util/cert:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index de7db7f19c1..82d40441908 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -54,11 +54,11 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/apiserver/pkg/storage/etcd3/preflight" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/client-go/discovery" cacheddiscovery "k8s.io/client-go/discovery/cached" clientgoinformers "k8s.io/client-go/informers" clientgoclientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" certutil "k8s.io/client-go/util/cert" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" openapi "k8s.io/kube-openapi/pkg/common" @@ -575,7 +575,7 @@ func BuildAdmissionPluginInitializers( // We have a functional client so we can use that to build our discovery backed REST mapper // Use a discovery client capable of being refreshed. discoveryClient := cacheddiscovery.NewMemCacheClient(client.Discovery()) - discoveryRESTMapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient) + discoveryRESTMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) admissionPostStartHook := func(context genericapiserver.PostStartHookContext) error { discoveryRESTMapper.Reset() diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index ce9a02b6dbc..74462342012 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -115,12 +115,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/cached:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/informers:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", "//vendor/k8s.io/client-go/tools/leaderelection:go_default_library", "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 3b4c645dca2..5ec454f0115 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -35,10 +35,10 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/discovery" cacheddiscovery "k8s.io/client-go/discovery/cached" "k8s.io/client-go/informers" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" certutil "k8s.io/client-go/util/cert" @@ -228,7 +228,7 @@ type ControllerContext struct { // DeferredDiscoveryRESTMapper is a RESTMapper that will defer // initialization of the RESTMapper until the first mapping is // requested. - RESTMapper *discovery.DeferredDiscoveryRESTMapper + RESTMapper *restmapper.DeferredDiscoveryRESTMapper // AvailableResources is a map listing currently available resources AvailableResources map[schema.GroupVersionResource]bool @@ -399,7 +399,7 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien // Use a discovery client capable of being refreshed. discoveryClient := rootClientBuilder.ClientOrDie("controller-discovery") cachedClient := cacheddiscovery.NewMemCacheClient(discoveryClient.Discovery()) - restMapper := discovery.NewDeferredDiscoveryRESTMapper(cachedClient) + restMapper := restmapper.NewDeferredDiscoveryRESTMapper(cachedClient) go wait.Until(func() { restMapper.Reset() }, 30*time.Second, stop) diff --git a/pkg/kubectl/cmd/testing/BUILD b/pkg/kubectl/cmd/testing/BUILD index 4140652d799..1d4ed962711 100644 --- a/pkg/kubectl/cmd/testing/BUILD +++ b/pkg/kubectl/cmd/testing/BUILD @@ -33,6 +33,7 @@ go_library( "//vendor/k8s.io/client-go/kubernetes: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/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", diff --git a/pkg/kubectl/cmd/testing/fake.go b/pkg/kubectl/cmd/testing/fake.go index 8633d310067..6dadb6d6be3 100644 --- a/pkg/kubectl/cmd/testing/fake.go +++ b/pkg/kubectl/cmd/testing/fake.go @@ -39,6 +39,7 @@ import ( "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/client-go/restmapper" scaleclient "k8s.io/client-go/scale" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -429,7 +430,7 @@ func (f *TestFactory) ClientSetForVersion(requiredVersion *schema.GroupVersion) func (f *TestFactory) RESTMapper() (meta.RESTMapper, error) { groupResources := testDynamicResources() - mapper := discovery.NewRESTMapper(groupResources) + mapper := restmapper.NewDiscoveryRESTMapper(groupResources) // for backwards compatibility with existing tests, allow rest mappings from the scheme to show up // TODO: make this opt-in? mapper = meta.FirstHitRESTMapper{ @@ -441,7 +442,7 @@ func (f *TestFactory) RESTMapper() (meta.RESTMapper, error) { // TODO: should probably be the external scheme fakeDs := &fakeCachedDiscoveryClient{} - expander := cmdutil.NewShortcutExpander(mapper, fakeDs) + expander := restmapper.NewShortcutExpander(mapper, fakeDs) return expander, nil } @@ -467,8 +468,8 @@ func (f *TestFactory) ScaleClient() (scaleclient.ScalesGetter, error) { return f.ScaleGetter, nil } -func testDynamicResources() []*discovery.APIGroupResources { - return []*discovery.APIGroupResources{ +func testDynamicResources() []*restmapper.APIGroupResources { + return []*restmapper.APIGroupResources{ { Group: metav1.APIGroup{ Versions: []metav1.GroupVersionForDiscovery{ diff --git a/pkg/kubectl/cmd/util/BUILD b/pkg/kubectl/cmd/util/BUILD index cd093401fb3..d28586d7998 100644 --- a/pkg/kubectl/cmd/util/BUILD +++ b/pkg/kubectl/cmd/util/BUILD @@ -12,7 +12,6 @@ go_library( "factory_object_mapping.go", "helpers.go", "printing.go", - "shortcut_restmapper.go", ], importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/util", visibility = ["//build/visible_to:pkg_kubectl_cmd_util_CONSUMERS"], @@ -69,6 +68,7 @@ go_library( "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/util/homedir:go_default_library", @@ -83,7 +83,6 @@ go_test( "factory_object_mapping_test.go", "factory_test.go", "helpers_test.go", - "shortcut_restmapper_test.go", ], embed = [":go_default_library"], deps = [ @@ -119,6 +118,7 @@ go_test( "//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", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ], diff --git a/pkg/kubectl/cmd/util/factory_object_mapping.go b/pkg/kubectl/cmd/util/factory_object_mapping.go index 14876e25d1c..bfbf9c1799b 100644 --- a/pkg/kubectl/cmd/util/factory_object_mapping.go +++ b/pkg/kubectl/cmd/util/factory_object_mapping.go @@ -38,9 +38,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" api "k8s.io/kubernetes/pkg/apis/core" @@ -84,9 +84,9 @@ func (f *ring1Factory) RESTMapper() (meta.RESTMapper, error) { } // allow conversion between typed and unstructured objects - mapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient) + mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) // TODO: should this also indicate it recognizes typed objects? - expander := NewShortcutExpander(mapper, discoveryClient) + expander := restmapper.NewShortcutExpander(mapper, discoveryClient) return expander, nil } diff --git a/pkg/kubectl/cmd/util/factory_test.go b/pkg/kubectl/cmd/util/factory_test.go index 34ce267fcb9..4accd536e73 100644 --- a/pkg/kubectl/cmd/util/factory_test.go +++ b/pkg/kubectl/cmd/util/factory_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/watch" manualfake "k8s.io/client-go/rest/fake" + "k8s.io/client-go/restmapper" testcore "k8s.io/client-go/testing" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" @@ -470,7 +471,7 @@ func TestDiscoveryReplaceAliases(t *testing.T) { } ds := &fakeDiscoveryClient{} - mapper := NewShortcutExpander(testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Registry, legacyscheme.Scheme), ds) + mapper := restmapper.NewShortcutExpander(testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Registry, legacyscheme.Scheme), ds) b := resource.NewFakeBuilder(fakeClient(), mapper, categories.LegacyCategoryExpander) for _, test := range tests { diff --git a/staging/BUILD b/staging/BUILD index ee79c600b82..e152dcf1044 100644 --- a/staging/BUILD +++ b/staging/BUILD @@ -141,6 +141,7 @@ filegroup( "//staging/src/k8s.io/client-go/pkg/version:all-srcs", "//staging/src/k8s.io/client-go/plugin/pkg/client/auth:all-srcs", "//staging/src/k8s.io/client-go/rest:all-srcs", + "//staging/src/k8s.io/client-go/restmapper:all-srcs", "//staging/src/k8s.io/client-go/scale:all-srcs", "//staging/src/k8s.io/client-go/testing:all-srcs", "//staging/src/k8s.io/client-go/third_party/forked/golang/template:all-srcs", diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 4c0c01ba20d..cc24f1974f4 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -385,7 +385,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource kind := schema.GroupVersionKind{Group: crd.Spec.Group, Version: crd.Spec.Version, Kind: crd.Status.AcceptedNames.Kind} typer := UnstructuredObjectTyper{ Delegate: parameterScheme, - UnstructuredTyper: discovery.NewUnstructuredObjectTyper(nil), + UnstructuredTyper: discovery.NewUnstructuredObjectTyper(), } creator := unstructuredCreator{} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go index 79fc7e83d0c..4487a3554f2 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go @@ -61,7 +61,7 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcdtestin typer := apiserver.UnstructuredObjectTyper{ Delegate: parameterScheme, - UnstructuredTyper: discovery.NewUnstructuredObjectTyper(nil), + UnstructuredTyper: discovery.NewUnstructuredObjectTyper(), } kind := schema.GroupVersionKind{Group: "mygroup.example.com", Version: "v1beta1", Kind: "Noxu"} diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD index 8c12d58d30d..6ea1e1ec92b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD @@ -31,6 +31,7 @@ go_library( "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go index bb7060e38f8..9b9329d9452 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go @@ -33,6 +33,7 @@ import ( "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" "k8s.io/client-go/scale" ) @@ -310,7 +311,7 @@ func CreateNewScaleClient(crd *apiextensionsv1beta1.CustomResourceDefinition, co return nil, err } - resources := []*discovery.APIGroupResources{ + resources := []*restmapper.APIGroupResources{ { Group: metav1.APIGroup{ Name: crd.Spec.Group, @@ -325,7 +326,7 @@ func CreateNewScaleClient(crd *apiextensionsv1beta1.CustomResourceDefinition, co }, } - restMapper := discovery.NewRESTMapper(resources) + restMapper := restmapper.NewDiscoveryRESTMapper(resources) resolver := scale.NewDiscoveryScaleKindResolver(discoveryClient) return scale.NewForConfig(config, restMapper, dynamic.LegacyAPIPathResolverFunc, resolver) diff --git a/staging/src/k8s.io/client-go/discovery/BUILD b/staging/src/k8s.io/client-go/discovery/BUILD index 82936005b12..9274d11b552 100644 --- a/staging/src/k8s.io/client-go/discovery/BUILD +++ b/staging/src/k8s.io/client-go/discovery/BUILD @@ -11,16 +11,13 @@ go_library( srcs = [ "discovery_client.go", "helper.go", - "restmapper.go", "unstructured.go", ], importpath = "k8s.io/client-go/discovery", deps = [ - "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/protobuf/proto:go_default_library", "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", @@ -34,20 +31,13 @@ go_library( go_test( name = "go_default_xtest", - srcs = [ - "helper_blackbox_test.go", - "restmapper_test.go", - ], + srcs = ["helper_blackbox_test.go"], deps = [ - "//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/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets: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/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", diff --git a/staging/src/k8s.io/client-go/discovery/unstructured.go b/staging/src/k8s.io/client-go/discovery/unstructured.go index fa7f2ec061b..81913a41423 100644 --- a/staging/src/k8s.io/client-go/discovery/unstructured.go +++ b/staging/src/k8s.io/client-go/discovery/unstructured.go @@ -26,31 +26,17 @@ import ( // UnstructuredObjectTyper provides a runtime.ObjectTyper implementation for // runtime.Unstructured object based on discovery information. type UnstructuredObjectTyper struct { - registered map[schema.GroupVersionKind]bool - typers []runtime.ObjectTyper + typers []runtime.ObjectTyper } // NewUnstructuredObjectTyper returns a runtime.ObjectTyper for // unstructured objects based on discovery information. It accepts a list of fallback typers // for handling objects that are not runtime.Unstructured. It does not delegate the Recognizes // check, only ObjectKinds. -func NewUnstructuredObjectTyper(groupResources []*APIGroupResources, typers ...runtime.ObjectTyper) *UnstructuredObjectTyper { +// TODO this only works for the apiextensions server and doesn't recognize any types. Move to point of use. +func NewUnstructuredObjectTyper(typers ...runtime.ObjectTyper) *UnstructuredObjectTyper { dot := &UnstructuredObjectTyper{ - registered: make(map[schema.GroupVersionKind]bool), - typers: typers, - } - for _, group := range groupResources { - for _, discoveryVersion := range group.Group.Versions { - resources, ok := group.VersionedResources[discoveryVersion.Version] - if !ok { - continue - } - - gv := schema.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version} - for _, resource := range resources { - dot.registered[gv.WithKind(resource.Kind)] = true - } - } + typers: typers, } return dot } @@ -89,7 +75,7 @@ func (d *UnstructuredObjectTyper) ObjectKinds(obj runtime.Object) (gvks []schema // Recognizes returns true if the provided group,version,kind was in the // discovery information. func (d *UnstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool { - return d.registered[gvk] + return false } var _ runtime.ObjectTyper = &UnstructuredObjectTyper{} diff --git a/staging/src/k8s.io/client-go/restmapper/BUILD b/staging/src/k8s.io/client-go/restmapper/BUILD new file mode 100644 index 00000000000..42a1d0392ce --- /dev/null +++ b/staging/src/k8s.io/client-go/restmapper/BUILD @@ -0,0 +1,53 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "discovery.go", + "shortcut.go", + ], + importpath = "k8s.io/client-go/restmapper", + visibility = ["//visibility:public"], + deps = [ + "//vendor/github.com/golang/glog:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta: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/client-go/discovery:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = [ + "discovery_test.go", + "shortcut_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta: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/staging/src/k8s.io/client-go/discovery/restmapper.go b/staging/src/k8s.io/client-go/restmapper/discovery.go similarity index 95% rename from staging/src/k8s.io/client-go/discovery/restmapper.go rename to staging/src/k8s.io/client-go/restmapper/discovery.go index 17ddc6c5c22..58887cd89ca 100644 --- a/staging/src/k8s.io/client-go/discovery/restmapper.go +++ b/staging/src/k8s.io/client-go/restmapper/discovery.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package discovery +package restmapper import ( "fmt" @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/discovery" "github.com/golang/glog" ) @@ -37,9 +38,9 @@ type APIGroupResources struct { VersionedResources map[string][]metav1.APIResource } -// NewRESTMapper returns a PriorityRESTMapper based on the discovered +// NewDiscoveryRESTMapper returns a PriorityRESTMapper based on the discovered // groups and resources passed in. -func NewRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper { +func NewDiscoveryRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper { unionMapper := meta.MultiRESTMapper{} var groupPriority []string @@ -141,7 +142,7 @@ func NewRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper { // GetAPIGroupResources uses the provided discovery client to gather // discovery information and populate a slice of APIGroupResources. -func GetAPIGroupResources(cl DiscoveryInterface) ([]*APIGroupResources, error) { +func GetAPIGroupResources(cl discovery.DiscoveryInterface) ([]*APIGroupResources, error) { apiGroups, err := cl.ServerGroups() if err != nil { if apiGroups == nil || len(apiGroups.Groups) == 0 { @@ -177,13 +178,13 @@ func GetAPIGroupResources(cl DiscoveryInterface) ([]*APIGroupResources, error) { type DeferredDiscoveryRESTMapper struct { initMu sync.Mutex delegate meta.RESTMapper - cl CachedDiscoveryInterface + cl discovery.CachedDiscoveryInterface } // NewDeferredDiscoveryRESTMapper returns a // DeferredDiscoveryRESTMapper that will lazily query the provided // client for discovery information to do REST mappings. -func NewDeferredDiscoveryRESTMapper(cl CachedDiscoveryInterface) *DeferredDiscoveryRESTMapper { +func NewDeferredDiscoveryRESTMapper(cl discovery.CachedDiscoveryInterface) *DeferredDiscoveryRESTMapper { return &DeferredDiscoveryRESTMapper{ cl: cl, } @@ -202,7 +203,7 @@ func (d *DeferredDiscoveryRESTMapper) getDelegate() (meta.RESTMapper, error) { return nil, err } - d.delegate = NewRESTMapper(groupResources) + d.delegate = NewDiscoveryRESTMapper(groupResources) return d.delegate, err } diff --git a/staging/src/k8s.io/client-go/discovery/restmapper_test.go b/staging/src/k8s.io/client-go/restmapper/discovery_test.go similarity index 99% rename from staging/src/k8s.io/client-go/discovery/restmapper_test.go rename to staging/src/k8s.io/client-go/restmapper/discovery_test.go index 4489bdb5fb6..1b8e7c4f056 100644 --- a/staging/src/k8s.io/client-go/discovery/restmapper_test.go +++ b/staging/src/k8s.io/client-go/restmapper/discovery_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package discovery_test +package restmapper import ( "reflect" @@ -94,7 +94,7 @@ func TestRESTMapper(t *testing.T) { }, } - restMapper := NewRESTMapper(resources) + restMapper := NewDiscoveryRESTMapper(resources) kindTCs := []struct { input schema.GroupVersionResource diff --git a/pkg/kubectl/cmd/util/shortcut_restmapper.go b/staging/src/k8s.io/client-go/restmapper/shortcut.go similarity index 93% rename from pkg/kubectl/cmd/util/shortcut_restmapper.go rename to staging/src/k8s.io/client-go/restmapper/shortcut.go index 8d19cd324ec..d9f4be0b6b1 100644 --- a/pkg/kubectl/cmd/util/shortcut_restmapper.go +++ b/staging/src/k8s.io/client-go/restmapper/shortcut.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package restmapper import ( "strings" @@ -36,34 +36,42 @@ type shortcutExpander struct { var _ meta.RESTMapper = &shortcutExpander{} -func NewShortcutExpander(delegate meta.RESTMapper, client discovery.DiscoveryInterface) shortcutExpander { +// NewShortcutExpander wraps a restmapper in a layer that expands shortcuts found via discovery +func NewShortcutExpander(delegate meta.RESTMapper, client discovery.DiscoveryInterface) meta.RESTMapper { return shortcutExpander{RESTMapper: delegate, discoveryClient: client} } +// KindFor fulfills meta.RESTMapper func (e shortcutExpander) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) { return e.RESTMapper.KindFor(e.expandResourceShortcut(resource)) } +// KindsFor fulfills meta.RESTMapper func (e shortcutExpander) KindsFor(resource schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { return e.RESTMapper.KindsFor(e.expandResourceShortcut(resource)) } +// ResourcesFor fulfills meta.RESTMapper func (e shortcutExpander) ResourcesFor(resource schema.GroupVersionResource) ([]schema.GroupVersionResource, error) { return e.RESTMapper.ResourcesFor(e.expandResourceShortcut(resource)) } +// ResourceFor fulfills meta.RESTMapper func (e shortcutExpander) ResourceFor(resource schema.GroupVersionResource) (schema.GroupVersionResource, error) { return e.RESTMapper.ResourceFor(e.expandResourceShortcut(resource)) } +// ResourceSingularizer fulfills meta.RESTMapper func (e shortcutExpander) ResourceSingularizer(resource string) (string, error) { return e.RESTMapper.ResourceSingularizer(e.expandResourceShortcut(schema.GroupVersionResource{Resource: resource}).Resource) } +// RESTMapping fulfills meta.RESTMapper func (e shortcutExpander) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) { return e.RESTMapper.RESTMapping(gk, versions...) } +// RESTMappings fulfills meta.RESTMapper func (e shortcutExpander) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) { return e.RESTMapper.RESTMappings(gk, versions...) } diff --git a/pkg/kubectl/cmd/util/shortcut_restmapper_test.go b/staging/src/k8s.io/client-go/restmapper/shortcut_test.go similarity index 56% rename from pkg/kubectl/cmd/util/shortcut_restmapper_test.go rename to staging/src/k8s.io/client-go/restmapper/shortcut_test.go index 34353020ff1..dbc288fadff 100644 --- a/pkg/kubectl/cmd/util/shortcut_restmapper_test.go +++ b/staging/src/k8s.io/client-go/restmapper/shortcut_test.go @@ -14,15 +14,21 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package restmapper import ( "testing" - "k8s.io/apimachinery/pkg/api/meta/testrestmapper" + "github.com/googleapis/gnostic/OpenAPIv2" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/apimachinery/pkg/version" + "k8s.io/client-go/discovery" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/rest/fake" ) func TestReplaceAliases(t *testing.T) { @@ -32,12 +38,6 @@ func TestReplaceAliases(t *testing.T) { expected schema.GroupVersionResource srvRes []*metav1.APIResourceList }{ - { - name: "rc-resolves-to-replicationcontrollers", - arg: "rc", - expected: schema.GroupVersionResource{Resource: "replicationcontrollers"}, - srvRes: []*metav1.APIResourceList{}, - }, { name: "storageclasses-no-replacement", arg: "storageclasses", @@ -126,13 +126,13 @@ func TestReplaceAliases(t *testing.T) { }, } - ds := &fakeDiscoveryClient{} - mapper := NewShortcutExpander(testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Registry, legacyscheme.Scheme), ds) - for _, test := range tests { + ds := &fakeDiscoveryClient{} ds.serverResourcesHandler = func() ([]*metav1.APIResourceList, error) { return test.srvRes, nil } + mapper := NewShortcutExpander(&fakeRESTMapper{}, ds).(shortcutExpander) + actual := mapper.expandResourceShortcut(schema.GroupVersionResource{Resource: test.arg}) if actual != test.expected { t.Errorf("%s: unexpected argument: expected %s, got %s", test.name, test.expected, actual) @@ -143,12 +143,12 @@ func TestReplaceAliases(t *testing.T) { func TestKindFor(t *testing.T) { tests := []struct { in schema.GroupVersionResource - expected schema.GroupVersionKind + expected schema.GroupVersionResource srvRes []*metav1.APIResourceList }{ { in: schema.GroupVersionResource{Group: "storage.k8s.io", Version: "", Resource: "sc"}, - expected: schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1", Kind: "StorageClass"}, + expected: schema.GroupVersionResource{Group: "storage.k8s.io", Version: "", Resource: "storageclasses"}, srvRes: []*metav1.APIResourceList{ { GroupVersion: "storage.k8s.io/v1", @@ -163,7 +163,7 @@ func TestKindFor(t *testing.T) { }, { in: schema.GroupVersionResource{Group: "", Version: "", Resource: "sc"}, - expected: schema.GroupVersionKind{Group: "storage.k8s.io", Version: "v1", Kind: "StorageClass"}, + expected: schema.GroupVersionResource{Group: "storage.k8s.io", Version: "", Resource: "storageclasses"}, srvRes: []*metav1.APIResourceList{ { GroupVersion: "storage.k8s.io/v1", @@ -178,19 +178,112 @@ func TestKindFor(t *testing.T) { }, } - ds := &fakeDiscoveryClient{} - mapper := NewShortcutExpander(testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Registry, legacyscheme.Scheme), ds) - for i, test := range tests { + ds := &fakeDiscoveryClient{} ds.serverResourcesHandler = func() ([]*metav1.APIResourceList, error) { return test.srvRes, nil } - ret, err := mapper.KindFor(test.in) - if err != nil { - t.Errorf("%d: unexpected error returned %s", i, err.Error()) - } - if ret != test.expected { - t.Errorf("%d: unexpected data returned %#v, expected %#v", i, ret, test.expected) + + delegate := &fakeRESTMapper{} + mapper := NewShortcutExpander(delegate, ds) + + mapper.KindFor(test.in) + if delegate.kindForInput != test.expected { + t.Errorf("%d: unexpected data returned %#v, expected %#v", i, delegate.kindForInput, test.expected) } } } + +type fakeRESTMapper struct { + kindForInput schema.GroupVersionResource +} + +func (f *fakeRESTMapper) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) { + f.kindForInput = resource + return schema.GroupVersionKind{}, nil +} + +func (f *fakeRESTMapper) KindsFor(resource schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { + return nil, nil +} + +func (f *fakeRESTMapper) ResourceFor(input schema.GroupVersionResource) (schema.GroupVersionResource, error) { + return schema.GroupVersionResource{}, nil +} + +func (f *fakeRESTMapper) ResourcesFor(input schema.GroupVersionResource) ([]schema.GroupVersionResource, error) { + return nil, nil +} + +func (f *fakeRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) { + return nil, nil +} + +func (f *fakeRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) { + return nil, nil +} + +func (f *fakeRESTMapper) ResourceSingularizer(resource string) (singular string, err error) { + return "", nil +} + +type fakeDiscoveryClient struct { + serverResourcesHandler func() ([]*metav1.APIResourceList, error) +} + +var _ discovery.DiscoveryInterface = &fakeDiscoveryClient{} + +func (c *fakeDiscoveryClient) RESTClient() restclient.Interface { + return &fake.RESTClient{} +} + +func (c *fakeDiscoveryClient) ServerGroups() (*metav1.APIGroupList, error) { + return &metav1.APIGroupList{ + Groups: []metav1.APIGroup{ + { + Name: "a", + Versions: []metav1.GroupVersionForDiscovery{ + { + GroupVersion: "a/v1", + Version: "v1", + }, + }, + PreferredVersion: metav1.GroupVersionForDiscovery{ + GroupVersion: "a/v1", + Version: "v1", + }, + }, + }, + }, nil +} + +func (c *fakeDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { + if groupVersion == "a/v1" { + return &metav1.APIResourceList{APIResources: []metav1.APIResource{{Name: "widgets", Kind: "Widget"}}}, nil + } + + return nil, errors.NewNotFound(schema.GroupResource{}, "") +} + +func (c *fakeDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) { + if c.serverResourcesHandler != nil { + return c.serverResourcesHandler() + } + return []*metav1.APIResourceList{}, nil +} + +func (c *fakeDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) { + return nil, nil +} + +func (c *fakeDiscoveryClient) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) { + return nil, nil +} + +func (c *fakeDiscoveryClient) ServerVersion() (*version.Info, error) { + return &version.Info{}, nil +} + +func (c *fakeDiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { + return &openapi_v2.Document{}, nil +} diff --git a/staging/src/k8s.io/client-go/scale/BUILD b/staging/src/k8s.io/client-go/scale/BUILD index aa6e04ee4aa..fea5cedc7c5 100644 --- a/staging/src/k8s.io/client-go/scale/BUILD +++ b/staging/src/k8s.io/client-go/scale/BUILD @@ -48,10 +48,10 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/fake:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/rest/fake:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/scale/client_test.go b/staging/src/k8s.io/client-go/scale/client_test.go index d7699453405..a3a8c037dd7 100644 --- a/staging/src/k8s.io/client-go/scale/client_test.go +++ b/staging/src/k8s.io/client-go/scale/client_test.go @@ -29,7 +29,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" serializer "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/client-go/discovery" fakedisco "k8s.io/client-go/discovery/fake" "k8s.io/client-go/dynamic" fakerest "k8s.io/client-go/rest/fake" @@ -40,6 +39,7 @@ import ( autoscalingv1 "k8s.io/api/autoscaling/v1" corev1 "k8s.io/api/core/v1" extv1beta1 "k8s.io/api/extensions/v1beta1" + "k8s.io/client-go/restmapper" coretesting "k8s.io/client-go/testing" ) @@ -96,11 +96,11 @@ func fakeScaleClient(t *testing.T) (ScalesGetter, []schema.GroupResource) { }, } - restMapperRes, err := discovery.GetAPIGroupResources(fakeDiscoveryClient) + restMapperRes, err := restmapper.GetAPIGroupResources(fakeDiscoveryClient) if err != nil { t.Fatalf("unexpected error while constructing resource list from fake discovery client: %v", err) } - restMapper := discovery.NewRESTMapper(restMapperRes) + restMapper := restmapper.NewDiscoveryRESTMapper(restMapperRes) autoscalingScale := &autoscalingv1.Scale{ TypeMeta: metav1.TypeMeta{ diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index b387d0fb4d3..f0b7207558f 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -146,6 +146,7 @@ go_library( "//vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index b1930ef4319..dcf04ec2a8c 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -39,6 +39,7 @@ import ( "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" scaleclient "k8s.io/client-go/scale" "k8s.io/client-go/tools/clientcmd" aggregatorclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset" @@ -182,7 +183,7 @@ func (f *Framework) BeforeEach() { discoClient, err := discovery.NewDiscoveryClientForConfig(config) Expect(err).NotTo(HaveOccurred()) cachedDiscoClient := cacheddiscovery.NewMemCacheClient(discoClient) - restMapper := discovery.NewDeferredDiscoveryRESTMapper(cachedDiscoClient) + restMapper := restmapper.NewDeferredDiscoveryRESTMapper(cachedDiscoClient) restMapper.Reset() resolver := scaleclient.NewDiscoveryScaleKindResolver(cachedDiscoClient) f.ScalesGetter = scaleclient.New(restClient, restMapper, dynamic.LegacyAPIPathResolverFunc, resolver) diff --git a/test/e2e/scalability/BUILD b/test/e2e/scalability/BUILD index e8aafde8168..11238a2f260 100644 --- a/test/e2e/scalability/BUILD +++ b/test/e2e/scalability/BUILD @@ -39,6 +39,7 @@ go_library( "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/scale:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/transport:go_default_library", diff --git a/test/e2e/scalability/load.go b/test/e2e/scalability/load.go index cdfc4b9b40e..99a808f606f 100644 --- a/test/e2e/scalability/load.go +++ b/test/e2e/scalability/load.go @@ -53,6 +53,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "k8s.io/client-go/dynamic" + "k8s.io/client-go/restmapper" "k8s.io/kubernetes/pkg/api/legacyscheme" ) @@ -409,7 +410,7 @@ func createClients(numberOfClients int) ([]clientset.Interface, []internalclient return nil, nil, nil, err } cachedDiscoClient := cacheddiscovery.NewMemCacheClient(discoClient) - restMapper := discovery.NewDeferredDiscoveryRESTMapper(cachedDiscoClient) + restMapper := restmapper.NewDeferredDiscoveryRESTMapper(cachedDiscoClient) restMapper.Reset() resolver := scaleclient.NewDiscoveryScaleKindResolver(cachedDiscoClient) scalesClients[i] = scaleclient.New(restClient, restMapper, dynamic.LegacyAPIPathResolverFunc, resolver) diff --git a/test/integration/etcd/BUILD b/test/integration/etcd/BUILD index 7bdff725faf..4198e15cc06 100644 --- a/test/integration/etcd/BUILD +++ b/test/integration/etcd/BUILD @@ -37,10 +37,10 @@ go_test( "//vendor/k8s.io/apiserver/pkg/server:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/options:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/cached:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", ], ) diff --git a/test/integration/etcd/etcd_storage_path_test.go b/test/integration/etcd/etcd_storage_path_test.go index d91cb0bbdfd..eb391d7ca57 100644 --- a/test/integration/etcd/etcd_storage_path_test.go +++ b/test/integration/etcd/etcd_storage_path_test.go @@ -43,7 +43,6 @@ import ( genericapiserver "k8s.io/apiserver/pkg/server" genericapiserveroptions "k8s.io/apiserver/pkg/server/options" "k8s.io/apiserver/pkg/storage/storagebackend" - "k8s.io/client-go/discovery" cacheddiscovery "k8s.io/client-go/discovery/cached" clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" @@ -59,6 +58,7 @@ import ( _ "k8s.io/kubernetes/pkg/master" // TODO what else is needed "github.com/coreos/etcd/clientv3" + "k8s.io/client-go/restmapper" ) // Etcd data for all persisted objects. @@ -802,12 +802,10 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV } discoveryClient := cacheddiscovery.NewMemCacheClient(kubeClient.Discovery()) - restMapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient) + restMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) restMapper.Reset() - // allow conversion between typed and unstructured objects - mapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient) - return client, kvClient, mapper + return client, kvClient, restMapper } func dumpEtcdKVOnFailure(t *testing.T, kvClient clientv3.KV) { diff --git a/test/integration/garbagecollector/BUILD b/test/integration/garbagecollector/BUILD index 8bc8f3eeb83..9229bdb7dc6 100644 --- a/test/integration/garbagecollector/BUILD +++ b/test/integration/garbagecollector/BUILD @@ -27,11 +27,11 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/names:go_default_library", - "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/cached:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/informers:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", + "//vendor/k8s.io/client-go/restmapper:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", ], ) diff --git a/test/integration/garbagecollector/garbage_collector_test.go b/test/integration/garbagecollector/garbage_collector_test.go index 2e20d637513..3258634663e 100644 --- a/test/integration/garbagecollector/garbage_collector_test.go +++ b/test/integration/garbagecollector/garbage_collector_test.go @@ -36,11 +36,11 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/storage/names" - "k8s.io/client-go/discovery" cacheddiscovery "k8s.io/client-go/discovery/cached" "k8s.io/client-go/dynamic" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/restmapper" "k8s.io/client-go/tools/cache" kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" "k8s.io/kubernetes/pkg/controller/garbagecollector" @@ -220,7 +220,7 @@ func setupWithServer(t *testing.T, result *kubeapiservertesting.TestServer, work createNamespaceOrDie("aval", clientSet, t) discoveryClient := cacheddiscovery.NewMemCacheClient(clientSet.Discovery()) - restMapper := discovery.NewDeferredDiscoveryRESTMapper(discoveryClient) + restMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) restMapper.Reset() deletableResources := garbagecollector.GetDeletableResources(discoveryClient) config := *result.ClientConfig From b96d03f02330527804dc844a7989c979efc1d925 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 7 May 2018 16:25:34 -0400 Subject: [PATCH 3/3] generated --- staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json index 098a0454ec4..1b63f1b678f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json @@ -2262,6 +2262,10 @@ "ImportPath": "k8s.io/client-go/rest", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/client-go/restmapper", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/client-go/scale", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"