mirror of https://github.com/k3s-io/k3s
Merge pull request #54692 from zjj2wry/set_selector_subject
Automatic merge from submit-queue (batch tested with PRs 55594, 47849, 54692, 55478, 54133). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. remove internal dependency from kubectl set command **What this PR does / why we need it**: **Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes # **Special notes for your reviewer**: ref #54212 cc @liggitt **Release note**: ```release-note NONE ```pull/6/head
commit
5102ef7bb9
|
@ -20,7 +20,6 @@ go_library(
|
|||
visibility = ["//build/visible_to:pkg_kubectl_cmd_set_CONSUMERS"],
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/rbac:go_default_library",
|
||||
"//pkg/kubectl:go_default_library",
|
||||
"//pkg/kubectl/cmd/templates:go_default_library",
|
||||
|
@ -61,11 +60,7 @@ go_test(
|
|||
importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/set",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/api/testapi:go_default_library",
|
||||
"//pkg/apis/batch:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/apis/rbac:go_default_library",
|
||||
"//pkg/kubectl/cmd/testing:go_default_library",
|
||||
"//pkg/kubectl/cmd/util:go_default_library",
|
||||
|
|
|
@ -21,13 +21,12 @@ import (
|
|||
"io"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"k8s.io/apimachinery/pkg/util/validation"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||
|
@ -119,6 +118,7 @@ func (o *SelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
|
|||
mapper, _ := f.Object()
|
||||
o.mapper = mapper
|
||||
o.encoder = f.JSONEncoder()
|
||||
|
||||
o.resources, o.selector, err = getResourcesAndSelector(args)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -178,10 +178,15 @@ func (o *SelectorOptions) RunSelector() error {
|
|||
return r.Visit(func(info *resource.Info, err error) error {
|
||||
patch := &Patch{Info: info}
|
||||
CalculatePatch(patch, o.encoder, func(info *resource.Info) ([]byte, error) {
|
||||
selectErr := updateSelectorForObject(info.Object, *o.selector)
|
||||
versioned, err := info.Mapping.ConvertToVersion(info.Object, info.Mapping.GroupVersionKind.GroupVersion())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
patch.Info.VersionedObject = versioned
|
||||
selectErr := updateSelectorForObject(info.VersionedObject, *o.selector)
|
||||
|
||||
if selectErr == nil {
|
||||
return runtime.Encode(o.encoder, info.Object)
|
||||
return runtime.Encode(o.encoder, info.VersionedObject)
|
||||
}
|
||||
return nil, selectErr
|
||||
})
|
||||
|
@ -190,8 +195,7 @@ func (o *SelectorOptions) RunSelector() error {
|
|||
return patch.Err
|
||||
}
|
||||
if o.local || o.dryrun {
|
||||
o.PrintObject(info.Object)
|
||||
return nil
|
||||
return o.PrintObject(info.VersionedObject)
|
||||
}
|
||||
|
||||
patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch)
|
||||
|
@ -211,7 +215,7 @@ func (o *SelectorOptions) RunSelector() error {
|
|||
|
||||
shortOutput := o.output == "name"
|
||||
if len(o.output) > 0 && !shortOutput {
|
||||
return o.PrintObject(info.Object)
|
||||
return o.PrintObject(patched)
|
||||
}
|
||||
cmdutil.PrintSuccess(o.mapper, shortOutput, o.out, info.Mapping.Resource, info.Name, o.dryrun, "selector updated")
|
||||
return nil
|
||||
|
@ -231,7 +235,7 @@ func updateSelectorForObject(obj runtime.Object, selector metav1.LabelSelector)
|
|||
}
|
||||
var err error
|
||||
switch t := obj.(type) {
|
||||
case *api.Service:
|
||||
case *v1.Service:
|
||||
t.Spec.Selector, err = copyOldSelector()
|
||||
default:
|
||||
err = fmt.Errorf("setting a selector is only supported for Services")
|
||||
|
|
|
@ -24,14 +24,14 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
batchv1 "k8s.io/api/batch/v1"
|
||||
"k8s.io/api/core/v1"
|
||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/rest/fake"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
"k8s.io/kubernetes/pkg/apis/batch"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
||||
"k8s.io/kubernetes/pkg/printers"
|
||||
)
|
||||
|
@ -46,14 +46,14 @@ func TestUpdateSelectorForObjectTypes(t *testing.T) {
|
|||
},
|
||||
}}
|
||||
|
||||
rc := api.ReplicationController{}
|
||||
ser := api.Service{}
|
||||
dep := extensions.Deployment{Spec: extensions.DeploymentSpec{Selector: &before}}
|
||||
ds := extensions.DaemonSet{Spec: extensions.DaemonSetSpec{Selector: &before}}
|
||||
rs := extensions.ReplicaSet{Spec: extensions.ReplicaSetSpec{Selector: &before}}
|
||||
job := batch.Job{Spec: batch.JobSpec{Selector: &before}}
|
||||
pvc := api.PersistentVolumeClaim{Spec: api.PersistentVolumeClaimSpec{Selector: &before}}
|
||||
sa := api.ServiceAccount{}
|
||||
rc := v1.ReplicationController{}
|
||||
ser := v1.Service{}
|
||||
dep := extensionsv1beta1.Deployment{Spec: extensionsv1beta1.DeploymentSpec{Selector: &before}}
|
||||
ds := extensionsv1beta1.DaemonSet{Spec: extensionsv1beta1.DaemonSetSpec{Selector: &before}}
|
||||
rs := extensionsv1beta1.ReplicaSet{Spec: extensionsv1beta1.ReplicaSetSpec{Selector: &before}}
|
||||
job := batchv1.Job{Spec: batchv1.JobSpec{Selector: &before}}
|
||||
pvc := v1.PersistentVolumeClaim{Spec: v1.PersistentVolumeClaimSpec{Selector: &before}}
|
||||
sa := v1.ServiceAccount{}
|
||||
type args struct {
|
||||
obj runtime.Object
|
||||
selector metav1.LabelSelector
|
||||
|
@ -128,7 +128,7 @@ func TestUpdateSelectorForObjectTypes(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateNewSelectorValuesForObject(t *testing.T) {
|
||||
ser := api.Service{}
|
||||
ser := v1.Service{}
|
||||
type args struct {
|
||||
obj runtime.Object
|
||||
selector metav1.LabelSelector
|
||||
|
@ -170,7 +170,7 @@ func TestUpdateNewSelectorValuesForObject(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateOldSelectorValuesForObject(t *testing.T) {
|
||||
ser := api.Service{Spec: api.ServiceSpec{Selector: map[string]string{"fee": "true"}}}
|
||||
ser := v1.Service{Spec: v1.ServiceSpec{Selector: map[string]string{"fee": "true"}}}
|
||||
type args struct {
|
||||
obj runtime.Object
|
||||
selector metav1.LabelSelector
|
||||
|
@ -318,7 +318,7 @@ func TestGetResourcesAndSelector(t *testing.T) {
|
|||
func TestSelectorTest(t *testing.T) {
|
||||
f, tf, codec, ns := cmdtesting.NewAPIFactory()
|
||||
tf.Client = &fake.RESTClient{
|
||||
GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
GroupVersion: schema.GroupVersion{Version: ""},
|
||||
NegotiatedSerializer: ns,
|
||||
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
||||
t.Fatalf("unexpected request: %s %#v\n%#v", req.Method, req.URL, req)
|
||||
|
@ -326,7 +326,7 @@ func TestSelectorTest(t *testing.T) {
|
|||
}),
|
||||
}
|
||||
tf.Namespace = "test"
|
||||
tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion}}
|
||||
tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Version: ""}}}
|
||||
|
||||
buf := bytes.NewBuffer([]byte{})
|
||||
cmd := NewCmdSelector(f, buf)
|
||||
|
|
Loading…
Reference in New Issue