Merge pull request #39291 from xilabao/fix-set-selector

Automatic merge from submit-queue (batch tested with PRs 38766, 39291)

fix kubectl set selector

fix #39290
pull/6/head
Kubernetes Submit Queue 2017-01-05 03:36:18 -08:00 committed by GitHub
commit acc81d6d96
3 changed files with 16 additions and 3 deletions

View File

@ -30,6 +30,7 @@ go_library(
"//pkg/runtime:go_default_library",
"//pkg/util/errors:go_default_library",
"//pkg/util/strategicpatch:go_default_library",
"//pkg/util/validation:go_default_library",
"//vendor:github.com/spf13/cobra",
],
)

View File

@ -29,6 +29,7 @@ import (
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/validation"
)
// SelectorOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of
@ -77,7 +78,7 @@ func NewCmdSelector(f cmdutil.Factory, out io.Writer) *cobra.Command {
cmd := &cobra.Command{
Use: "selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]",
Short: "Set the selector on a resource",
Long: fmt.Sprintf(selectorLong),
Long: fmt.Sprintf(selectorLong, validation.LabelValueMaxLength),
Example: selectorExample,
Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(options.Complete(f, cmd, args, out))
@ -136,6 +137,9 @@ func (o *SelectorOptions) Validate() error {
if len(o.resources) < 1 && cmdutil.IsFilenameEmpty(o.fileOptions.Filenames) {
return fmt.Errorf("one or more resources must be specified as <resource> <name> or <resource>/<name>")
}
if o.selector == nil {
return fmt.Errorf("one selector is required")
}
return nil
}
@ -213,9 +217,10 @@ func updateSelectorForObject(obj runtime.Object, selector metav1.LabelSelector)
// getResourcesAndSelector retrieves resources and the selector expression from the given args (assuming selectors the last arg)
func getResourcesAndSelector(args []string) (resources []string, selector *metav1.LabelSelector, err error) {
if len(args) > 1 {
resources = args[:len(args)-1]
if len(args) == 0 {
return []string{}, nil, nil
}
resources = args[:len(args)-1]
selector, err = metav1.ParseToLabelSelector(args[len(args)-1])
return resources, selector, err
}

View File

@ -283,6 +283,13 @@ func TestGetResourcesAndSelector(t *testing.T) {
MatchExpressions: []metav1.LabelSelectorRequirement{},
},
},
{
name: "no resource and selector",
args: args{args: []string{}},
wantResources: []string{},
wantErr: false,
wantSelector: nil,
},
}
for _, tt := range tests {
gotResources, gotSelector, err := getResourcesAndSelector(tt.args.args)