mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
make describers more generic from the CLI
This commit is contained in:
parent
c778d871e0
commit
66a95a8f3e
@ -89,7 +89,6 @@ go_library(
|
|||||||
"//pkg/kubectl/util/term:go_default_library",
|
"//pkg/kubectl/util/term:go_default_library",
|
||||||
"//pkg/kubectl/validation:go_default_library",
|
"//pkg/kubectl/validation:go_default_library",
|
||||||
"//pkg/printers:go_default_library",
|
"//pkg/printers:go_default_library",
|
||||||
"//pkg/printers/internalversion:go_default_library",
|
|
||||||
"//pkg/util/interrupt:go_default_library",
|
"//pkg/util/interrupt:go_default_library",
|
||||||
"//pkg/util/taints:go_default_library",
|
"//pkg/util/taints:go_default_library",
|
||||||
"//pkg/version:go_default_library",
|
"//pkg/version:go_default_library",
|
||||||
|
@ -26,13 +26,11 @@ import (
|
|||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -75,11 +73,6 @@ func NewCmdDescribe(f cmdutil.Factory, out, cmdErr io.Writer) *cobra.Command {
|
|||||||
ShowEvents: true,
|
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{
|
cmd := &cobra.Command{
|
||||||
Use: "describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)",
|
Use: "describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)",
|
||||||
DisableFlagsInUseLine: true,
|
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)
|
err := RunDescribe(f, out, cmdErr, cmd, args, options, describerSettings)
|
||||||
cmdutil.CheckErr(err)
|
cmdutil.CheckErr(err)
|
||||||
},
|
},
|
||||||
ValidArgs: validArgs,
|
|
||||||
ArgAliases: argAliases,
|
|
||||||
}
|
}
|
||||||
usage := "containing the resource to describe"
|
usage := "containing the resource to describe"
|
||||||
cmdutil.AddFilenameOptionFlags(cmd, options, usage)
|
cmdutil.AddFilenameOptionFlags(cmd, options, usage)
|
||||||
|
@ -164,16 +164,12 @@ func (f *ring1Factory) UnstructuredClientForMapping(mapping *meta.RESTMapping) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (printers.Describer, error) {
|
func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (printers.Describer, error) {
|
||||||
clientset, err := f.clientAccessFactory.ClientSet()
|
clientConfig, err := f.clientAccessFactory.ClientConfig()
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
externalclientset, err := f.clientAccessFactory.KubernetesClientSet()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// try to get a describer
|
// 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
|
return describer, nil
|
||||||
}
|
}
|
||||||
// if this is a kind we don't have a describer for yet, go generic if possible
|
// if this is a kind we don't have a describer for yet, go generic if possible
|
||||||
|
@ -107,6 +107,7 @@ go_library(
|
|||||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_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/dynamic:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
|
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/client-go/dynamic"
|
"k8s.io/client-go/dynamic"
|
||||||
externalclient "k8s.io/client-go/kubernetes"
|
externalclient "k8s.io/client-go/kubernetes"
|
||||||
|
"k8s.io/client-go/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/events"
|
"k8s.io/kubernetes/pkg/api/events"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/api/ref"
|
"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{
|
m := map[schema.GroupKind]printers.Describer{
|
||||||
api.Kind("Pod"): &PodDescriber{c},
|
api.Kind("Pod"): &PodDescriber{c},
|
||||||
api.Kind("ReplicationController"): &ReplicationControllerDescriber{c},
|
api.Kind("ReplicationController"): &ReplicationControllerDescriber{c},
|
||||||
@ -164,24 +174,19 @@ func describerMap(c clientset.Interface, externalclient externalclient.Interface
|
|||||||
scheduling.Kind("PriorityClass"): &PriorityClassDescriber{c},
|
scheduling.Kind("PriorityClass"): &PriorityClassDescriber{c},
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m, nil
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DescriberFor returns the default describe functions for each of the standard
|
// DescriberFor returns the default describe functions for each of the standard
|
||||||
// Kubernetes types.
|
// Kubernetes types.
|
||||||
func DescriberFor(kind schema.GroupKind, c clientset.Interface, externalclient externalclient.Interface) (printers.Describer, bool) {
|
func DescriberFor(kind schema.GroupKind, clientConfig *rest.Config) (printers.Describer, bool) {
|
||||||
f, ok := describerMap(c, externalclient)[kind]
|
describers, err := describerMap(clientConfig)
|
||||||
|
if err != nil {
|
||||||
|
glog.V(1).Info(err)
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
f, ok := describers[kind]
|
||||||
return f, ok
|
return f, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user