diff --git a/pkg/kubectl/cmd/set/BUILD b/pkg/kubectl/cmd/set/BUILD index 03b043b09fc..04a98ce07de 100644 --- a/pkg/kubectl/cmd/set/BUILD +++ b/pkg/kubectl/cmd/set/BUILD @@ -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", diff --git a/pkg/kubectl/cmd/set/set_selector.go b/pkg/kubectl/cmd/set/set_selector.go index 4a5e4eec311..bebc824db60 100644 --- a/pkg/kubectl/cmd/set/set_selector.go +++ b/pkg/kubectl/cmd/set/set_selector.go @@ -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") diff --git a/pkg/kubectl/cmd/set/set_selector_test.go b/pkg/kubectl/cmd/set/set_selector_test.go index c2923fcb0df..901b9564991 100644 --- a/pkg/kubectl/cmd/set/set_selector_test.go +++ b/pkg/kubectl/cmd/set/set_selector_test.go @@ -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)