diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index 594808e1b84..6c6037417e8 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -89,7 +89,6 @@ go_library( "//pkg/kubectl/util/term:go_default_library", "//pkg/kubectl/validation:go_default_library", "//pkg/printers:go_default_library", - "//pkg/printers/internalversion:go_default_library", "//pkg/util/interrupt:go_default_library", "//pkg/util/taints:go_default_library", "//pkg/version:go_default_library", diff --git a/pkg/kubectl/cmd/describe.go b/pkg/kubectl/cmd/describe.go index 0ff28a2ac28..8d6139ab856 100644 --- a/pkg/kubectl/cmd/describe.go +++ b/pkg/kubectl/cmd/describe.go @@ -26,13 +26,11 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" - "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" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/printers" - printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" ) var ( @@ -75,11 +73,6 @@ func NewCmdDescribe(f cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command { ShowEvents: true, } - // TODO: this should come from the factory, and may need to be loaded from the server, and so is probably - // going to have to be removed - validArgs := printersinternal.DescribableResources() - argAliases := kubectl.ResourceAliases(validArgs) - cmd := &cobra.Command{ Use: "describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)", DisableFlagsInUseLine: true, @@ -90,8 +83,6 @@ func NewCmdDescribe(f cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command { err := RunDescribe(f, out, cmdErr, cmd, args, options, describerSettings) cmdutil.CheckErr(err) }, - ValidArgs: validArgs, - ArgAliases: argAliases, } usage := "containing the resource to describe" cmdutil.AddFilenameOptionFlags(cmd, options, usage) diff --git a/pkg/kubectl/cmd/util/factory_object_mapping.go b/pkg/kubectl/cmd/util/factory_object_mapping.go index 4dfcef318b6..b40f75a123a 100644 --- a/pkg/kubectl/cmd/util/factory_object_mapping.go +++ b/pkg/kubectl/cmd/util/factory_object_mapping.go @@ -164,16 +164,12 @@ func (f *ring1Factory) UnstructuredClientForMapping(mapping *meta.RESTMapping) ( } func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (printers.Describer, error) { - clientset, err := f.clientAccessFactory.ClientSet() - if err != nil { - return nil, err - } - externalclientset, err := f.clientAccessFactory.KubernetesClientSet() + clientConfig, err := f.clientAccessFactory.ClientConfig() if err != nil { return nil, err } // try to get a describer - if describer, ok := printersinternal.DescriberFor(mapping.GroupVersionKind.GroupKind(), clientset, externalclientset); ok { + if describer, ok := printersinternal.DescriberFor(mapping.GroupVersionKind.GroupKind(), clientConfig); ok { return describer, nil } // if this is a kind we don't have a describer for yet, go generic if possible diff --git a/pkg/printers/internalversion/BUILD b/pkg/printers/internalversion/BUILD index 5e7a7e7e92d..c28c99c0949 100644 --- a/pkg/printers/internalversion/BUILD +++ b/pkg/printers/internalversion/BUILD @@ -107,6 +107,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_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", ], ) diff --git a/pkg/printers/internalversion/describe.go b/pkg/printers/internalversion/describe.go index 24a8ae01817..24d33c83cd5 100644 --- a/pkg/printers/internalversion/describe.go +++ b/pkg/printers/internalversion/describe.go @@ -47,6 +47,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/dynamic" externalclient "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" "k8s.io/kubernetes/pkg/api/events" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/ref" @@ -123,7 +124,16 @@ func (pw *prefixWriter) Flush() { } } -func describerMap(c clientset.Interface, externalclient externalclient.Interface) map[schema.GroupKind]printers.Describer { +func describerMap(clientConfig *rest.Config) (map[schema.GroupKind]printers.Describer, error) { + c, err := clientset.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + externalclient, err := externalclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + m := map[schema.GroupKind]printers.Describer{ api.Kind("Pod"): &PodDescriber{c}, api.Kind("ReplicationController"): &ReplicationControllerDescriber{c}, @@ -164,24 +174,19 @@ func describerMap(c clientset.Interface, externalclient externalclient.Interface scheduling.Kind("PriorityClass"): &PriorityClassDescriber{c}, } - return m -} - -// DescribableResources lists all resource types we can describe. -func DescribableResources() []string { - keys := make([]string, 0) - - for k := range describerMap(nil, nil) { - resource := strings.ToLower(k.Kind) - keys = append(keys, resource) - } - return keys + return m, nil } // DescriberFor returns the default describe functions for each of the standard // Kubernetes types. -func DescriberFor(kind schema.GroupKind, c clientset.Interface, externalclient externalclient.Interface) (printers.Describer, bool) { - f, ok := describerMap(c, externalclient)[kind] +func DescriberFor(kind schema.GroupKind, clientConfig *rest.Config) (printers.Describer, bool) { + describers, err := describerMap(clientConfig) + if err != nil { + glog.V(1).Info(err) + return nil, false + } + + f, ok := describers[kind] return f, ok }