diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index 34ca0acf390..d29e5a411cf 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -275,6 +275,8 @@ _kubectl_describe() flags+=("--help") flags+=("-h") + flags+=("--selector=") + two_word_flags+=("-l") must_have_one_flag=() must_have_one_noun=() diff --git a/docs/kubectl_describe.md b/docs/kubectl_describe.md index a4936229b97..3f3a8b34568 100644 --- a/docs/kubectl_describe.md +++ b/docs/kubectl_describe.md @@ -22,12 +22,16 @@ $ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal // Describe a pod $ kubectl describe pods/nginx + +// Describe pods by label name=myLabel +$ kubectl describe po -l name=myLabel ``` ### Options ``` -h, --help=false: help for describe + -l, --selector="": Selector (label query) to filter on ``` ### Options inherited from parent commands @@ -62,6 +66,6 @@ $ kubectl describe pods/nginx ### SEE ALSO * [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager -###### Auto generated by spf13/cobra at 2015-05-21 10:33:11.177122438 +0000 UTC +###### Auto generated by spf13/cobra at 2015-06-12 06:44:05.105790085 +0000 UTC [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/kubectl_describe.md?pixel)]() diff --git a/docs/man/man1/kubectl-describe.1 b/docs/man/man1/kubectl-describe.1 index f8856055a3f..cfb438a6910 100644 --- a/docs/man/man1/kubectl-describe.1 +++ b/docs/man/man1/kubectl-describe.1 @@ -25,6 +25,10 @@ given resource. \fB\-h\fP, \fB\-\-help\fP=false help for describe +.PP +\fB\-l\fP, \fB\-\-selector\fP="" + Selector (label query) to filter on + .SH OPTIONS INHERITED FROM PARENT COMMANDS .PP @@ -135,6 +139,9 @@ $ kubectl describe nodes kubernetes\-minion\-emt8.c.myproject.internal // Describe a pod $ kubectl describe pods/nginx +// Describe pods by label name=myLabel +$ kubectl describe po \-l name=myLabel + .fi .RE diff --git a/pkg/kubectl/cmd/describe.go b/pkg/kubectl/cmd/describe.go index 57bedd3764f..5b240636fe4 100644 --- a/pkg/kubectl/cmd/describe.go +++ b/pkg/kubectl/cmd/describe.go @@ -43,17 +43,22 @@ given resource.`, $ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal // Describe a pod -$ kubectl describe pods/nginx`, +$ kubectl describe pods/nginx + +// Describe pods by label name=myLabel +$ kubectl describe po -l name=myLabel`, Run: func(cmd *cobra.Command, args []string) { err := RunDescribe(f, out, cmd, args) cmdutil.CheckErr(err) }, ValidArgs: kubectl.DescribableResources(), } + cmd.Flags().StringP("selector", "l", "", "Selector (label query) to filter on") return cmd } func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string) error { + selector := cmdutil.GetFlagString(cmd, "selector") cmdNamespace, err := f.DefaultNamespace() if err != nil { return err @@ -63,6 +68,7 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()). ContinueOnError(). NamespaceParam(cmdNamespace).DefaultNamespace(). + SelectorParam(selector). ResourceTypeOrNameArgs(false, args...). Flatten(). Do() @@ -86,16 +92,15 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s } return err } - if len(infos) > 1 { - return fmt.Errorf("multiple resources provided: %v", args) - } - info := infos[0] - s, err := describer.Describe(info.Namespace, info.Name) - if err != nil { - return err + for _, info := range infos { + s, err := describer.Describe(info.Namespace, info.Name) + if err != nil { + return err + } + fmt.Fprintf(out, "%s\n\n", s) } - fmt.Fprintf(out, "%s\n", s) + return nil } diff --git a/pkg/kubectl/cmd/describe_test.go b/pkg/kubectl/cmd/describe_test.go index fa2ab194c98..3fce05e466d 100644 --- a/pkg/kubectl/cmd/describe_test.go +++ b/pkg/kubectl/cmd/describe_test.go @@ -44,7 +44,7 @@ func TestDescribeUnknownSchemaObject(t *testing.T) { t.Errorf("unexpected describer: %#v", d) } - if buf.String() != fmt.Sprintf("%s\n", d.Output) { + if buf.String() != fmt.Sprintf("%s\n\n", d.Output) { t.Errorf("unexpected output: %s", buf.String()) } }