diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index af557c43a6c..c2b5a9fce0a 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -313,7 +313,8 @@ __kubectl_require_pod_and_container() __custom_func() { case ${last_command} in - kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop | kubectl_edit | kubectl_patch) + kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop | kubectl_edit | kubectl_patch |\ + kubectl_annotate) __kubectl_get_resource return ;; @@ -2782,7 +2783,42 @@ _kubectl_annotate() must_have_one_flag=() must_have_one_noun=() + must_have_one_noun+=("componentstatuse") + must_have_one_noun+=("event") + must_have_one_noun+=("horizontalpodautoscaler") + must_have_one_noun+=("limitrange") + must_have_one_noun+=("node") + must_have_one_noun+=("persistentvolume") + must_have_one_noun+=("persistentvolumeclaim") + must_have_one_noun+=("pod") + must_have_one_noun+=("replicationcontroller") + must_have_one_noun+=("resourcequota") + must_have_one_noun+=("secret") + must_have_one_noun+=("service") noun_aliases=() + noun_aliases+=("componentstatuses") + noun_aliases+=("cs") + noun_aliases+=("ev") + noun_aliases+=("events") + noun_aliases+=("horizontalpodautoscalers") + noun_aliases+=("hpa") + noun_aliases+=("limitranges") + noun_aliases+=("limits") + noun_aliases+=("no") + noun_aliases+=("nodes") + noun_aliases+=("persistentvolumeclaims") + noun_aliases+=("persistentvolumes") + noun_aliases+=("po") + noun_aliases+=("pods") + noun_aliases+=("pv") + noun_aliases+=("pvc") + noun_aliases+=("quota") + noun_aliases+=("rc") + noun_aliases+=("replicationcontrollers") + noun_aliases+=("resourcequotas") + noun_aliases+=("secrets") + noun_aliases+=("services") + noun_aliases+=("svc") } _kubectl_config_view() diff --git a/docs/man/man1/kubectl-annotate.1 b/docs/man/man1/kubectl-annotate.1 index 0cf2dd3d055..29c2347f68a 100644 --- a/docs/man/man1/kubectl-annotate.1 +++ b/docs/man/man1/kubectl-annotate.1 @@ -22,10 +22,11 @@ If \-\-overwrite is true, then existing annotations can be overwritten, otherwis If \-\-resource\-version is specified, then updates will use this resource version, otherwise the existing resource\-version will be used. .PP -Possible resources include (case insensitive): pods (po), services (svc), -replicationcontrollers (rc), nodes (no), events (ev), componentstatuses (cs), -limitranges (limits), persistentvolumes (pv), persistentvolumeclaims (pvc), -horizontalpodautoscalers (hpa), resourcequotas (quota) or secrets. +Possible resources include (case insensitive): + pod (po), service (svc), replicationcontroller (rc), + node (no), event (ev), componentstatuse (cs), + limitrange (limits), persistentvolume (pv), persistentvolumeclaim (pvc), + horizontalpodautoscaler (hpa), resourcequota (quota), secret .SH OPTIONS diff --git a/docs/user-guide/kubectl/kubectl_annotate.md b/docs/user-guide/kubectl/kubectl_annotate.md index 31398b92359..9ebafe833c3 100644 --- a/docs/user-guide/kubectl/kubectl_annotate.md +++ b/docs/user-guide/kubectl/kubectl_annotate.md @@ -46,10 +46,12 @@ It is intended to store non-identifying auxiliary data, especially data manipula If --overwrite is true, then existing annotations can be overwritten, otherwise attempting to overwrite an annotation will result in an error. If --resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used. -Possible resources include (case insensitive): pods (po), services (svc), -replicationcontrollers (rc), nodes (no), events (ev), componentstatuses (cs), -limitranges (limits), persistentvolumes (pv), persistentvolumeclaims (pvc), -horizontalpodautoscalers (hpa), resourcequotas (quota) or secrets. +Possible resources include (case insensitive): + pod (po), service (svc), replicationcontroller (rc), + node (no), event (ev), componentstatuse (cs), + limitrange (limits), persistentvolume (pv), persistentvolumeclaim (pvc), + horizontalpodautoscaler (hpa), resourcequota (quota), secret + ``` kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] @@ -130,7 +132,7 @@ kubectl annotate pods foo description- * [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager -###### Auto generated by spf13/cobra on 30-Mar-2016 +###### Auto generated by spf13/cobra on 10-Apr-2016 [![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubectl/kubectl_annotate.md?pixel)]() diff --git a/pkg/kubectl/cmd/annotate.go b/pkg/kubectl/cmd/annotate.go index 9177559b32b..3a081ad2d43 100644 --- a/pkg/kubectl/cmd/annotate.go +++ b/pkg/kubectl/cmd/annotate.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "io" + "regexp" "strings" "github.com/golang/glog" @@ -58,6 +59,13 @@ type AnnotateOptions struct { } const ( + annotate_resources = ` + pod (po), service (svc), replicationcontroller (rc), + node (no), event (ev), componentstatuse (cs), + limitrange (limits), persistentvolume (pv), persistentvolumeclaim (pvc), + horizontalpodautoscaler (hpa), resourcequota (quota), secret +` + annotate_long = `Update the annotations on one or more resources. An annotation is a key/value pair that can hold larger (compared to a label), and possibly not human-readable, data. @@ -65,10 +73,8 @@ It is intended to store non-identifying auxiliary data, especially data manipula If --overwrite is true, then existing annotations can be overwritten, otherwise attempting to overwrite an annotation will result in an error. If --resource-version is specified, then updates will use this resource version, otherwise the existing resource-version will be used. -Possible resources include (case insensitive): pods (po), services (svc), -replicationcontrollers (rc), nodes (no), events (ev), componentstatuses (cs), -limitranges (limits), persistentvolumes (pv), persistentvolumeclaims (pvc), -horizontalpodautoscalers (hpa), resourcequotas (quota) or secrets.` +Possible resources include (case insensitive):` + annotate_resources + annotate_example = `# Update pod 'foo' with the annotation 'description' and the value 'my frontend'. # If the same annotation is set multiple times, only the last value will be applied kubectl annotate pods foo description='my frontend' @@ -93,6 +99,13 @@ kubectl annotate pods foo description-` func NewCmdAnnotate(f *cmdutil.Factory, out io.Writer) *cobra.Command { options := &AnnotateOptions{} + validArgs, argAliases := []string{}, []string{} + resources := regexp.MustCompile(`\s*,`).Split(annotate_resources, -1) + for _, r := range resources { + validArgs = append(validArgs, strings.Fields(r)[0]) + argAliases = kubectl.ResourceAliases(validArgs) + } + cmd := &cobra.Command{ Use: "annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]", Short: "Update the annotations on a resource", @@ -109,6 +122,8 @@ func NewCmdAnnotate(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.CheckErr(err) } }, + ValidArgs: validArgs, + ArgAliases: argAliases, } cmdutil.AddPrinterFlags(cmd) cmdutil.AddInclude3rdPartyFlags(cmd) diff --git a/pkg/kubectl/cmd/cmd.go b/pkg/kubectl/cmd/cmd.go index df358a73f6d..68003be44e9 100644 --- a/pkg/kubectl/cmd/cmd.go +++ b/pkg/kubectl/cmd/cmd.go @@ -124,7 +124,8 @@ __kubectl_require_pod_and_container() __custom_func() { case ${last_command} in - kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop | kubectl_edit | kubectl_patch) + kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop | kubectl_edit | kubectl_patch |\ + kubectl_annotate) __kubectl_get_resource return ;;