mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
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
This commit is contained in:
commit
acc81d6d96
@ -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 (
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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)
|
|||||||
|
|
||||||
// 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) {
|
|||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user