Merge pull request #29319 from juanvallejo/jvallejo_bugfix/single-resource-version-flag

Automatic merge from submit-queue

fix annotate.go single resource check

```release-note
Fix issue with kubectl annotate when --resource-version is provided.
```

When using `kubectl annotate` with a `--resource-version` on a resource, such as `kubectl annotate pod <pod_name> --resource-version=1820 description='myannotation'`, the command fails with the error: `error: --resource-version may only be used with a single resource`.

Upon printing the output of `resources` that the annotate command receives from cli args, it prints: `Resources:[pod <pod_name>]`. In other words, it treats the name of the resource as a second resource. This PR addresses this issue by using the resource builder `Singular` flag to determine if only a single resource was passed.
This commit is contained in:
Kubernetes Submit Queue 2016-08-04 13:26:50 -07:00 committed by GitHub
commit 8770b2e237

View File

@ -188,16 +188,7 @@ func (o *AnnotateOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra
// Validate checks to the AnnotateOptions to see if there is sufficient information run the command.
func (o AnnotateOptions) Validate(args []string) error {
if err := validateAnnotations(o.removeAnnotations, o.newAnnotations); err != nil {
return err
}
// only apply resource version locking on a single resource
if len(o.resources) > 1 && len(o.resourceVersion) > 0 {
return fmt.Errorf("--resource-version may only be used with a single resource")
}
return nil
return validateAnnotations(o.removeAnnotations, o.newAnnotations)
}
// RunAnnotate does the work
@ -207,6 +198,17 @@ func (o AnnotateOptions) RunAnnotate() error {
return err
}
var singularResource bool
r.IntoSingular(&singularResource)
// only apply resource version locking on a single resource.
// we must perform this check after o.builder.Do() as
// []o.resources can not not accurately return the proper number
// of resources when they are not passed in "resource/name" format.
if !singularResource && len(o.resourceVersion) > 0 {
return fmt.Errorf("--resource-version may only be used with a single resource")
}
return r.Visit(func(info *resource.Info, err error) error {
if err != nil {
return err