Merge pull request #92576 from zhouya0/support_kubectl_annotate_list
Support kubectl annotate --list option Kubernetes-commit: 8b9c9eade3447a9c2d0ac089bd960dc71996cb84
This commit is contained in:
commit
c9180e990f
|
@ -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
14
go.mod
|
@ -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
8
go.sum
|
@ -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=
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue