mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
use versionedObject replace internal in kubectl set selector
This commit is contained in:
parent
d6cabaf706
commit
1fa1e8dac1
@ -20,7 +20,6 @@ go_library(
|
|||||||
visibility = ["//build/visible_to:pkg_kubectl_cmd_set_CONSUMERS"],
|
visibility = ["//build/visible_to:pkg_kubectl_cmd_set_CONSUMERS"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/apis/core:go_default_library",
|
|
||||||
"//pkg/apis/rbac:go_default_library",
|
"//pkg/apis/rbac:go_default_library",
|
||||||
"//pkg/kubectl:go_default_library",
|
"//pkg/kubectl:go_default_library",
|
||||||
"//pkg/kubectl/cmd/templates:go_default_library",
|
"//pkg/kubectl/cmd/templates:go_default_library",
|
||||||
@ -61,11 +60,7 @@ go_test(
|
|||||||
importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/set",
|
importpath = "k8s.io/kubernetes/pkg/kubectl/cmd/set",
|
||||||
library = ":go_default_library",
|
library = ":go_default_library",
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
|
||||||
"//pkg/api/testapi: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/apis/rbac:go_default_library",
|
||||||
"//pkg/kubectl/cmd/testing:go_default_library",
|
"//pkg/kubectl/cmd/testing:go_default_library",
|
||||||
"//pkg/kubectl/cmd/util:go_default_library",
|
"//pkg/kubectl/cmd/util:go_default_library",
|
||||||
|
@ -21,13 +21,12 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/validation"
|
"k8s.io/apimachinery/pkg/util/validation"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
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"
|
||||||
@ -119,6 +118,7 @@ func (o *SelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [
|
|||||||
mapper, _ := f.Object()
|
mapper, _ := f.Object()
|
||||||
o.mapper = mapper
|
o.mapper = mapper
|
||||||
o.encoder = f.JSONEncoder()
|
o.encoder = f.JSONEncoder()
|
||||||
|
|
||||||
o.resources, o.selector, err = getResourcesAndSelector(args)
|
o.resources, o.selector, err = getResourcesAndSelector(args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -178,10 +178,15 @@ func (o *SelectorOptions) RunSelector() error {
|
|||||||
return r.Visit(func(info *resource.Info, err error) error {
|
return r.Visit(func(info *resource.Info, err error) error {
|
||||||
patch := &Patch{Info: info}
|
patch := &Patch{Info: info}
|
||||||
CalculatePatch(patch, o.encoder, func(info *resource.Info) ([]byte, error) {
|
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 {
|
if selectErr == nil {
|
||||||
return runtime.Encode(o.encoder, info.Object)
|
return runtime.Encode(o.encoder, info.VersionedObject)
|
||||||
}
|
}
|
||||||
return nil, selectErr
|
return nil, selectErr
|
||||||
})
|
})
|
||||||
@ -190,8 +195,7 @@ func (o *SelectorOptions) RunSelector() error {
|
|||||||
return patch.Err
|
return patch.Err
|
||||||
}
|
}
|
||||||
if o.local || o.dryrun {
|
if o.local || o.dryrun {
|
||||||
o.PrintObject(info.Object)
|
return o.PrintObject(info.VersionedObject)
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch)
|
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"
|
shortOutput := o.output == "name"
|
||||||
if len(o.output) > 0 && !shortOutput {
|
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")
|
cmdutil.PrintSuccess(o.mapper, shortOutput, o.out, info.Mapping.Resource, info.Name, o.dryrun, "selector updated")
|
||||||
return nil
|
return nil
|
||||||
@ -231,7 +235,7 @@ func updateSelectorForObject(obj runtime.Object, selector metav1.LabelSelector)
|
|||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
switch t := obj.(type) {
|
switch t := obj.(type) {
|
||||||
case *api.Service:
|
case *v1.Service:
|
||||||
t.Spec.Selector, err = copyOldSelector()
|
t.Spec.Selector, err = copyOldSelector()
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("setting a selector is only supported for Services")
|
err = fmt.Errorf("setting a selector is only supported for Services")
|
||||||
|
@ -24,14 +24,14 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"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"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/rest/fake"
|
"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"
|
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
||||||
"k8s.io/kubernetes/pkg/printers"
|
"k8s.io/kubernetes/pkg/printers"
|
||||||
)
|
)
|
||||||
@ -46,14 +46,14 @@ func TestUpdateSelectorForObjectTypes(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
rc := api.ReplicationController{}
|
rc := v1.ReplicationController{}
|
||||||
ser := api.Service{}
|
ser := v1.Service{}
|
||||||
dep := extensions.Deployment{Spec: extensions.DeploymentSpec{Selector: &before}}
|
dep := extensionsv1beta1.Deployment{Spec: extensionsv1beta1.DeploymentSpec{Selector: &before}}
|
||||||
ds := extensions.DaemonSet{Spec: extensions.DaemonSetSpec{Selector: &before}}
|
ds := extensionsv1beta1.DaemonSet{Spec: extensionsv1beta1.DaemonSetSpec{Selector: &before}}
|
||||||
rs := extensions.ReplicaSet{Spec: extensions.ReplicaSetSpec{Selector: &before}}
|
rs := extensionsv1beta1.ReplicaSet{Spec: extensionsv1beta1.ReplicaSetSpec{Selector: &before}}
|
||||||
job := batch.Job{Spec: batch.JobSpec{Selector: &before}}
|
job := batchv1.Job{Spec: batchv1.JobSpec{Selector: &before}}
|
||||||
pvc := api.PersistentVolumeClaim{Spec: api.PersistentVolumeClaimSpec{Selector: &before}}
|
pvc := v1.PersistentVolumeClaim{Spec: v1.PersistentVolumeClaimSpec{Selector: &before}}
|
||||||
sa := api.ServiceAccount{}
|
sa := v1.ServiceAccount{}
|
||||||
type args struct {
|
type args struct {
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
selector metav1.LabelSelector
|
selector metav1.LabelSelector
|
||||||
@ -128,7 +128,7 @@ func TestUpdateSelectorForObjectTypes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateNewSelectorValuesForObject(t *testing.T) {
|
func TestUpdateNewSelectorValuesForObject(t *testing.T) {
|
||||||
ser := api.Service{}
|
ser := v1.Service{}
|
||||||
type args struct {
|
type args struct {
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
selector metav1.LabelSelector
|
selector metav1.LabelSelector
|
||||||
@ -170,7 +170,7 @@ func TestUpdateNewSelectorValuesForObject(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateOldSelectorValuesForObject(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 {
|
type args struct {
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
selector metav1.LabelSelector
|
selector metav1.LabelSelector
|
||||||
@ -318,7 +318,7 @@ func TestGetResourcesAndSelector(t *testing.T) {
|
|||||||
func TestSelectorTest(t *testing.T) {
|
func TestSelectorTest(t *testing.T) {
|
||||||
f, tf, codec, ns := cmdtesting.NewAPIFactory()
|
f, tf, codec, ns := cmdtesting.NewAPIFactory()
|
||||||
tf.Client = &fake.RESTClient{
|
tf.Client = &fake.RESTClient{
|
||||||
GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
GroupVersion: schema.GroupVersion{Version: ""},
|
||||||
NegotiatedSerializer: ns,
|
NegotiatedSerializer: ns,
|
||||||
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
||||||
t.Fatalf("unexpected request: %s %#v\n%#v", req.Method, req.URL, req)
|
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.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{})
|
buf := bytes.NewBuffer([]byte{})
|
||||||
cmd := NewCmdSelector(f, buf)
|
cmd := NewCmdSelector(f, buf)
|
||||||
|
Loading…
Reference in New Issue
Block a user