From 3a8a98c319fcea3bd6b16f41b1f00cd0f2463db7 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Wed, 29 Apr 2015 16:47:10 -0700 Subject: [PATCH] Augment describe to search for matching things if it doesn't match the original resource --- pkg/kubectl/cmd/describe.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pkg/kubectl/cmd/describe.go b/pkg/kubectl/cmd/describe.go index eb88e5e5e90..9ba0ac140ec 100644 --- a/pkg/kubectl/cmd/describe.go +++ b/pkg/kubectl/cmd/describe.go @@ -19,12 +19,16 @@ package cmd import ( "fmt" "io" + "strings" "github.com/spf13/cobra" + "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" + "github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl" cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/resource" + "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" ) func NewCmdDescribe(f *cmdutil.Factory, out io.Writer) *cobra.Command { @@ -77,6 +81,9 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s } infos, err := r.Infos() if err != nil { + if errors.IsNotFound(err) && len(args) == 2 { + return DescribeMatchingResources(mapper, typer, describer, f, cmdNamespace, args[0], args[1], out) + } return err } info := infos[0] @@ -88,3 +95,27 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s fmt.Fprintf(out, "%s\n", s) return nil } + +func DescribeMatchingResources(mapper meta.RESTMapper, typer runtime.ObjectTyper, describer kubectl.Describer, f *cmdutil.Factory, namespace, rsrc, prefix string, out io.Writer) error { + r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()). + NamespaceParam(namespace).DefaultNamespace(). + ResourceTypeOrNameArgs(true, rsrc). + SingleResourceType(). + Flatten(). + Do() + infos, err := r.Infos() + if err != nil { + return err + } + for ix := range infos { + info := infos[ix] + if strings.HasPrefix(info.Name, prefix) { + s, err := describer.Describe(info.Namespace, info.Name) + if err != nil { + return err + } + fmt.Fprintf(out, "%s\n", s) + } + } + return nil +}