Merge pull request #92576 from zhouya0/support_kubectl_annotate_list

Support kubectl annotate --list option

Kubernetes-commit: 8b9c9eade3447a9c2d0ac089bd960dc71996cb84
This commit is contained in:
Kubernetes Publisher 2020-07-01 00:08:06 -07:00
commit c9180e990f
4 changed files with 46 additions and 17 deletions

8
Godeps/Godeps.json generated
View File

@ -756,7 +756,7 @@
},
{
"ImportPath": "k8s.io/apimachinery",
"Rev": "61490fe38e78"
"Rev": "3c7bc0acc576"
},
{
"ImportPath": "k8s.io/cli-runtime",
@ -764,15 +764,15 @@
},
{
"ImportPath": "k8s.io/client-go",
"Rev": "db5293afc7bf"
"Rev": "5f4e5d88ae20"
},
{
"ImportPath": "k8s.io/code-generator",
"Rev": "806abdab469d"
"Rev": "8cda81c075eb"
},
{
"ImportPath": "k8s.io/component-base",
"Rev": "f52a9b7250e8"
"Rev": "d18546f5347c"
},
{
"ImportPath": "k8s.io/gengo",

14
go.mod
View File

@ -35,10 +35,10 @@ require (
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4
gopkg.in/yaml.v2 v2.2.8
k8s.io/api v0.0.0-20200630090439-aaebd44608df
k8s.io/apimachinery v0.0.0-20200630050232-61490fe38e78
k8s.io/apimachinery v0.0.0-20200701090254-3c7bc0acc576
k8s.io/cli-runtime v0.0.0-20200626132723-2eb52e397b36
k8s.io/client-go v0.0.0-20200626130735-db5293afc7bf
k8s.io/component-base v0.0.0-20200626131333-f52a9b7250e8
k8s.io/client-go v0.0.0-20200701090722-5f4e5d88ae20
k8s.io/component-base v0.0.0-20200701091302-d18546f5347c
k8s.io/klog/v2 v2.1.0
k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9
k8s.io/metrics v0.0.0-20200626132606-5c4f2f7c7389
@ -50,10 +50,10 @@ require (
replace (
k8s.io/api => k8s.io/api v0.0.0-20200630090439-aaebd44608df
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200630050232-61490fe38e78
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200701090254-3c7bc0acc576
k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20200626132723-2eb52e397b36
k8s.io/client-go => k8s.io/client-go v0.0.0-20200626130735-db5293afc7bf
k8s.io/code-generator => k8s.io/code-generator v0.0.0-20200627130045-806abdab469d
k8s.io/component-base => k8s.io/component-base v0.0.0-20200626131333-f52a9b7250e8
k8s.io/client-go => k8s.io/client-go v0.0.0-20200701090722-5f4e5d88ae20
k8s.io/code-generator => k8s.io/code-generator v0.0.0-20200630203207-8cda81c075eb
k8s.io/component-base => k8s.io/component-base v0.0.0-20200701091302-d18546f5347c
k8s.io/metrics => k8s.io/metrics v0.0.0-20200626132606-5c4f2f7c7389
)

8
go.sum
View File

@ -500,11 +500,11 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.0.0-20200630090439-aaebd44608df/go.mod h1:cQk/DBCsCL81chJRAZjSBZ4suDeNugUZE3LqnYmbQ8Q=
k8s.io/apimachinery v0.0.0-20200630050232-61490fe38e78/go.mod h1:m5QoVMHU94aieNFPfLqf7WmU8HLVLm3JasG64COkSXQ=
k8s.io/apimachinery v0.0.0-20200701090254-3c7bc0acc576/go.mod h1:m5QoVMHU94aieNFPfLqf7WmU8HLVLm3JasG64COkSXQ=
k8s.io/cli-runtime v0.0.0-20200626132723-2eb52e397b36/go.mod h1:OhgKaSIb4QiRuP7OgZhF1AVYpJWPqZGCUEBrz43EVLU=
k8s.io/client-go v0.0.0-20200626130735-db5293afc7bf/go.mod h1:xWyNNU1CYxp5Qle29OSU49QrlzME3jkGOpv9FsbIFr4=
k8s.io/code-generator v0.0.0-20200627130045-806abdab469d/go.mod h1:aD/nj2JYq+c08kIHSepJsc4OcOxWttpHwg0vxpLmR0Q=
k8s.io/component-base v0.0.0-20200626131333-f52a9b7250e8/go.mod h1:c8B2Gs7ipNKY0Hn4SBgCBsMo38vovG9B2E90kf+Fg1E=
k8s.io/client-go v0.0.0-20200701090722-5f4e5d88ae20/go.mod h1:Y5OYSw+CsoY5JMltVhj6q9JT4Z34smh50YxF7mGFK50=
k8s.io/code-generator v0.0.0-20200630203207-8cda81c075eb/go.mod h1:aD/nj2JYq+c08kIHSepJsc4OcOxWttpHwg0vxpLmR0Q=
k8s.io/component-base v0.0.0-20200701091302-d18546f5347c/go.mod h1:pGD8AyabkKuFECRDD6O/tqp75/EWa7AtVGYuU1zPLy8=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok=

View File

@ -27,6 +27,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/json"
@ -52,6 +53,7 @@ type AnnotateOptions struct {
// Common user flags
overwrite bool
list bool
local bool
dryRunStrategy cmdutil.DryRunStrategy
dryRunVerifier *resource.DryRunVerifier
@ -143,6 +145,7 @@ func NewCmdAnnotate(parent string, f cmdutil.Factory, ioStreams genericclioption
o.PrintFlags.AddFlags(cmd)
cmd.Flags().BoolVar(&o.overwrite, "overwrite", o.overwrite, "If true, allow annotations to be overwritten, otherwise reject annotation updates that overwrite existing annotations.")
cmd.Flags().BoolVar(&o.list, "list", o.list, "If true, display the annotations for a given resource.")
cmd.Flags().BoolVar(&o.local, "local", o.local, "If true, annotation will NOT contact api-server but run locally.")
cmd.Flags().StringVarP(&o.selector, "selector", "l", o.selector, "Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2).")
cmd.Flags().StringVar(&o.fieldSelector, "field-selector", o.fieldSelector, "Selector (field query) to filter on, supports '=', '==', and '!='.(e.g. --field-selector key1=value1,key2=value2). The server only supports a limited number of field queries per type.")
@ -190,6 +193,10 @@ func (o *AnnotateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
return printer.PrintObj(obj, out)
}
if o.list && len(o.outputFormat) > 0 {
return fmt.Errorf("--list and --output may not be specified together")
}
o.namespace, o.enforceNamespace, err = f.ToRawKubeConfigLoader().Namespace()
if err != nil {
return err
@ -235,7 +242,7 @@ func (o AnnotateOptions) Validate() error {
return fmt.Errorf("one or more files must be specified as -f rsrc.yaml or --filename=rsrc.json")
}
}
if len(o.newAnnotations) < 1 && len(o.removeAnnotations) < 1 {
if len(o.newAnnotations) < 1 && len(o.removeAnnotations) < 1 && !o.list {
return fmt.Errorf("at least one annotation update is required")
}
return validateAnnotations(o.removeAnnotations, o.newAnnotations)
@ -282,7 +289,7 @@ func (o AnnotateOptions) RunAnnotate() error {
var outputObj runtime.Object
obj := info.Object
if o.dryRunStrategy == cmdutil.DryRunClient || o.local {
if o.dryRunStrategy == cmdutil.DryRunClient || o.local || o.list {
if err := o.updateAnnotations(obj); err != nil {
return err
}
@ -344,6 +351,28 @@ func (o AnnotateOptions) RunAnnotate() error {
}
}
if o.list {
accessor, err := meta.Accessor(outputObj)
if err != nil {
return err
}
indent := ""
if !singleItemImpliedResource {
indent = " "
gvks, _, err := unstructuredscheme.NewUnstructuredObjectTyper().ObjectKinds(info.Object)
if err != nil {
return err
}
fmt.Fprintf(o.ErrOut, "Listing annotations for %s.%s/%s:\n", gvks[0].Kind, gvks[0].Group, info.Name)
}
for k, v := range accessor.GetAnnotations() {
fmt.Fprintf(o.Out, "%s%s=%s\n", indent, k, v)
}
return nil
}
return o.PrintObj(outputObj, o.Out)
})
}