Commit 78a0fb1e authored by xilabao's avatar xilabao

fix kubectl set selector

parent 76dfee04
...@@ -30,6 +30,7 @@ go_library( ...@@ -30,6 +30,7 @@ go_library(
"//pkg/runtime:go_default_library", "//pkg/runtime:go_default_library",
"//pkg/util/errors:go_default_library", "//pkg/util/errors:go_default_library",
"//pkg/util/strategicpatch:go_default_library", "//pkg/util/strategicpatch:go_default_library",
"//pkg/util/validation:go_default_library",
"//vendor:github.com/spf13/cobra", "//vendor:github.com/spf13/cobra",
], ],
) )
......
...@@ -29,6 +29,7 @@ import ( ...@@ -29,6 +29,7 @@ import (
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/resource"
"k8s.io/kubernetes/pkg/runtime" "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 // 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 { ...@@ -77,7 +78,7 @@ func NewCmdSelector(f cmdutil.Factory, out io.Writer) *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]", Use: "selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]",
Short: "Set the selector on a resource", Short: "Set the selector on a resource",
Long: fmt.Sprintf(selectorLong), Long: fmt.Sprintf(selectorLong, validation.LabelValueMaxLength),
Example: selectorExample, Example: selectorExample,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(options.Complete(f, cmd, args, out)) cmdutil.CheckErr(options.Complete(f, cmd, args, out))
...@@ -136,6 +137,9 @@ func (o *SelectorOptions) Validate() error { ...@@ -136,6 +137,9 @@ func (o *SelectorOptions) Validate() error {
if len(o.resources) < 1 && cmdutil.IsFilenameEmpty(o.fileOptions.Filenames) { 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>") 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 return nil
} }
...@@ -213,9 +217,10 @@ func updateSelectorForObject(obj runtime.Object, selector metav1.LabelSelector) ...@@ -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) // 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) { func getResourcesAndSelector(args []string) (resources []string, selector *metav1.LabelSelector, err error) {
if len(args) > 1 { if len(args) == 0 {
resources = args[:len(args)-1] return []string{}, nil, nil
} }
resources = args[:len(args)-1]
selector, err = metav1.ParseToLabelSelector(args[len(args)-1]) selector, err = metav1.ParseToLabelSelector(args[len(args)-1])
return resources, selector, err return resources, selector, err
} }
...@@ -283,6 +283,13 @@ func TestGetResourcesAndSelector(t *testing.T) { ...@@ -283,6 +283,13 @@ func TestGetResourcesAndSelector(t *testing.T) {
MatchExpressions: []metav1.LabelSelectorRequirement{}, MatchExpressions: []metav1.LabelSelectorRequirement{},
}, },
}, },
{
name: "no resource and selector",
args: args{args: []string{}},
wantResources: []string{},
wantErr: false,
wantSelector: nil,
},
} }
for _, tt := range tests { for _, tt := range tests {
gotResources, gotSelector, err := getResourcesAndSelector(tt.args.args) gotResources, gotSelector, err := getResourcesAndSelector(tt.args.args)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment