From d8a5420b7c30210cf46b3313bc4e29482f1832a1 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 21 Feb 2018 12:10:38 -0500 Subject: [PATCH] remove unneeded factory codec methods --- pkg/kubectl/cmd/annotate_test.go | 17 ++- pkg/kubectl/cmd/apply.go | 6 +- pkg/kubectl/cmd/apply_set_last_applied.go | 7 +- pkg/kubectl/cmd/apply_test.go | 34 +++--- pkg/kubectl/cmd/attach_test.go | 16 ++- pkg/kubectl/cmd/auth/BUILD | 1 + pkg/kubectl/cmd/auth/cani_test.go | 5 +- pkg/kubectl/cmd/autoscale.go | 4 +- pkg/kubectl/cmd/clusterinfo_dump_test.go | 4 +- pkg/kubectl/cmd/cmd_test.go | 29 +++-- pkg/kubectl/cmd/convert.go | 4 +- pkg/kubectl/cmd/convert_test.go | 2 +- pkg/kubectl/cmd/create.go | 4 +- pkg/kubectl/cmd/create_clusterrole_test.go | 4 +- .../cmd/create_clusterrolebinding_test.go | 4 +- pkg/kubectl/cmd/create_configmap_test.go | 7 +- pkg/kubectl/cmd/create_deployment_test.go | 9 +- pkg/kubectl/cmd/create_namespace_test.go | 7 +- pkg/kubectl/cmd/create_pdb_test.go | 5 +- pkg/kubectl/cmd/create_priorityclass_test.go | 5 +- pkg/kubectl/cmd/create_quota_test.go | 7 +- pkg/kubectl/cmd/create_role_test.go | 6 +- pkg/kubectl/cmd/create_rolebinding_test.go | 4 +- pkg/kubectl/cmd/create_secret_test.go | 12 +- pkg/kubectl/cmd/create_service_test.go | 17 ++- pkg/kubectl/cmd/create_serviceaccount_test.go | 7 +- pkg/kubectl/cmd/create_test.go | 16 ++- pkg/kubectl/cmd/delete_test.go | 54 ++++++--- pkg/kubectl/cmd/describe_test.go | 27 +++-- pkg/kubectl/cmd/diff.go | 2 +- pkg/kubectl/cmd/drain_test.go | 13 ++- pkg/kubectl/cmd/edit_test.go | 2 +- pkg/kubectl/cmd/exec_test.go | 11 +- pkg/kubectl/cmd/expose.go | 6 +- pkg/kubectl/cmd/expose_test.go | 6 +- pkg/kubectl/cmd/label_test.go | 14 ++- pkg/kubectl/cmd/logs_test.go | 11 +- pkg/kubectl/cmd/patch_test.go | 18 ++- pkg/kubectl/cmd/plugin_test.go | 2 +- pkg/kubectl/cmd/portforward_test.go | 7 +- pkg/kubectl/cmd/replace.go | 4 +- pkg/kubectl/cmd/replace_test.go | 18 ++- pkg/kubectl/cmd/resource/BUILD | 1 + pkg/kubectl/cmd/resource/get.go | 2 +- pkg/kubectl/cmd/resource/get_test.go | 99 ++++++++++++----- pkg/kubectl/cmd/rollingupdate_test.go | 2 +- pkg/kubectl/cmd/rollout/rollout_pause.go | 12 +- pkg/kubectl/cmd/rollout/rollout_resume.go | 4 +- pkg/kubectl/cmd/run.go | 6 +- pkg/kubectl/cmd/run_test.go | 16 ++- pkg/kubectl/cmd/set/BUILD | 1 + pkg/kubectl/cmd/set/set_env.go | 6 +- pkg/kubectl/cmd/set/set_env_test.go | 11 +- pkg/kubectl/cmd/set/set_image.go | 8 +- pkg/kubectl/cmd/set/set_image_test.go | 12 +- pkg/kubectl/cmd/set/set_resources.go | 6 +- pkg/kubectl/cmd/set/set_resources_test.go | 12 +- pkg/kubectl/cmd/set/set_selector.go | 6 +- pkg/kubectl/cmd/set/set_selector_test.go | 4 +- pkg/kubectl/cmd/set/set_serviceaccount.go | 6 +- .../cmd/set/set_serviceaccount_test.go | 11 +- pkg/kubectl/cmd/set/set_subject.go | 6 +- pkg/kubectl/cmd/set/set_subject_test.go | 2 +- pkg/kubectl/cmd/taint_test.go | 6 +- pkg/kubectl/cmd/testing/BUILD | 2 +- pkg/kubectl/cmd/testing/fake.go | 105 ++---------------- pkg/kubectl/cmd/top_node_test.go | 37 ++++-- pkg/kubectl/cmd/top_pod_test.go | 13 ++- pkg/kubectl/cmd/top_test.go | 2 +- pkg/kubectl/cmd/util/editor/editoptions.go | 14 +-- pkg/kubectl/cmd/util/factory.go | 7 -- pkg/kubectl/cmd/util/factory_builder.go | 2 +- pkg/kubectl/cmd/util/factory_client_access.go | 27 ++--- pkg/kubectl/explain/BUILD | 3 +- pkg/kubectl/explain/explain_test.go | 11 +- pkg/kubectl/scheme/scheme.go | 5 + 76 files changed, 543 insertions(+), 362 deletions(-) diff --git a/pkg/kubectl/cmd/annotate_test.go b/pkg/kubectl/cmd/annotate_test.go index f10d41c2604..a9ee8d69596 100644 --- a/pkg/kubectl/cmd/annotate_test.go +++ b/pkg/kubectl/cmd/annotate_test.go @@ -28,7 +28,9 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestValidateAnnotationOverwrites(t *testing.T) { @@ -415,7 +417,7 @@ func TestAnnotateErrors(t *testing.T) { } for k, testCase := range testCases { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.ClientConfig = defaultClientConfig() @@ -444,7 +446,9 @@ func TestAnnotateErrors(t *testing.T) { func TestAnnotateObject(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -494,7 +498,9 @@ func TestAnnotateObject(t *testing.T) { func TestAnnotateObjectFromFile(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -543,7 +549,7 @@ func TestAnnotateObjectFromFile(t *testing.T) { } func TestAnnotateLocal(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -574,7 +580,8 @@ func TestAnnotateLocal(t *testing.T) { func TestAnnotateMultipleObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "testgroup", Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index 142fd71ac14..71486bdac48 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -241,8 +241,8 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti output := cmdutil.GetFlagString(cmd, "output") shortOutput := output == "name" - encoder := f.JSONEncoder() - decoder := f.Decoder(false) + encoder := scheme.DefaultJSONEncoder() + deserializer := scheme.Codecs.UniversalDeserializer() mapper := r.Mapper().RESTMapper visitedUids := sets.NewString() @@ -316,7 +316,7 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti helper := resource.NewHelper(info.Client, info.Mapping) patcher := &patcher{ encoder: encoder, - decoder: decoder, + decoder: deserializer, mapping: info.Mapping, helper: helper, clientFunc: f.UnstructuredClientForMapping, diff --git a/pkg/kubectl/cmd/apply_set_last_applied.go b/pkg/kubectl/cmd/apply_set_last_applied.go index 6b20f3e0c38..5a0c565b501 100644 --- a/pkg/kubectl/cmd/apply_set_last_applied.go +++ b/pkg/kubectl/cmd/apply_set_last_applied.go @@ -36,6 +36,7 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" ) @@ -51,7 +52,6 @@ type SetLastAppliedOptions struct { ShortOutput bool CreateAnnotation bool Output string - Codec runtime.Encoder PatchBufferList []PatchBuffer Factory cmdutil.Factory Out io.Writer @@ -110,7 +110,6 @@ func (o *SetLastAppliedOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) o.DryRun = cmdutil.GetDryRunFlag(cmd) o.Output = cmdutil.GetFlagString(cmd, "output") o.ShortOutput = o.Output == "name" - o.Codec = f.JSONEncoder() var err error o.Mapper, o.Typer = f.Object() @@ -134,7 +133,7 @@ func (o *SetLastAppliedOptions) Validate(f cmdutil.Factory, cmd *cobra.Command) if err != nil { return err } - patchBuf, diffBuf, patchType, err := editor.GetApplyPatch(info.Object, o.Codec) + patchBuf, diffBuf, patchType, err := editor.GetApplyPatch(info.Object, scheme.DefaultJSONEncoder()) if err != nil { return err } @@ -224,7 +223,7 @@ func (o *SetLastAppliedOptions) getPatch(info *resource.Info) ([]byte, []byte, e objMap := map[string]map[string]map[string]string{} metadataMap := map[string]map[string]string{} annotationsMap := map[string]string{} - localFile, err := runtime.Encode(o.Codec, info.Object) + localFile, err := runtime.Encode(scheme.DefaultJSONEncoder(), info.Object) if err != nil { return nil, localFile, err } diff --git a/pkg/kubectl/cmd/apply_test.go b/pkg/kubectl/cmd/apply_test.go index bdae2e0e76c..1788fa77e1a 100644 --- a/pkg/kubectl/cmd/apply_test.go +++ b/pkg/kubectl/cmd/apply_test.go @@ -38,12 +38,14 @@ import ( sptest "k8s.io/apimachinery/pkg/util/strategicpatch/testing" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/extensions" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) var ( @@ -65,7 +67,7 @@ func TestApplyExtraArgsFail(t *testing.T) { buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() c := NewCmdApply("kubectl", f, buf, errBuf) if validateApplyArgs(c, []string{"rc"}) == nil { t.Fatalf("unexpected non-error") @@ -329,7 +331,9 @@ func TestRunApplyViewLastApplied(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -384,7 +388,7 @@ func TestApplyObjectWithoutAnnotation(t *testing.T) { nameRC, rcBytes := readReplicationController(t, filenameRC) pathRC := "/namespaces/test/replicationcontrollers/" + nameRC - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -428,7 +432,7 @@ func TestApplyObject(t *testing.T) { pathRC := "/namespaces/test/replicationcontrollers/" + nameRC for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -489,7 +493,7 @@ func TestApplyObjectOutput(t *testing.T) { } for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -538,7 +542,7 @@ func TestApplyRetry(t *testing.T) { firstPatch := true retry := false getCount := 0 - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -595,7 +599,7 @@ func TestApplyNonExistObject(t *testing.T) { pathRC := "/namespaces/test/replicationcontrollers" pathNameRC := pathRC + "/" + nameRC - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -639,7 +643,7 @@ func TestApplyEmptyPatch(t *testing.T) { var body []byte - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -713,7 +717,7 @@ func testApplyMultipleObjects(t *testing.T, asList bool) { pathSVC := "/namespaces/test/services/" + nameSVC for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -796,7 +800,7 @@ func TestApplyNULLPreservation(t *testing.T) { deploymentBytes := readDeploymentFromFile(t, filenameDeployObjServerside) for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -868,7 +872,7 @@ func TestUnstructuredApply(t *testing.T) { verifiedPatch := false for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -935,7 +939,7 @@ func TestUnstructuredIdempotentApply(t *testing.T) { verifiedPatch := false for _, fn := range testingOpenAPISchemaFns { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -1063,7 +1067,9 @@ func TestRunApplySetLastApplied(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -1153,7 +1159,7 @@ func TestForceApply(t *testing.T) { for _, fn := range testingOpenAPISchemaFns { deleted := false counts := map[string]int{} - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/attach_test.go b/pkg/kubectl/cmd/attach_test.go index f4d9b1d5cd7..babbf843869 100644 --- a/pkg/kubectl/cmd/attach_test.go +++ b/pkg/kubectl/cmd/attach_test.go @@ -38,6 +38,7 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) type fakeRemoteAttach struct { @@ -138,7 +139,10 @@ func TestPodAndContainerAttach(t *testing.T) { } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, @@ -215,7 +219,10 @@ func TestAttach(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, @@ -302,7 +309,10 @@ func TestAttachWarnings(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/auth/BUILD b/pkg/kubectl/cmd/auth/BUILD index a56d23420df..5aa487c498c 100644 --- a/pkg/kubectl/cmd/auth/BUILD +++ b/pkg/kubectl/cmd/auth/BUILD @@ -52,6 +52,7 @@ go_test( srcs = ["cani_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/api/legacyscheme:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", diff --git a/pkg/kubectl/cmd/auth/cani_test.go b/pkg/kubectl/cmd/auth/cani_test.go index 0b4407f6d86..2a786602a18 100644 --- a/pkg/kubectl/cmd/auth/cani_test.go +++ b/pkg/kubectl/cmd/auth/cani_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -119,7 +120,9 @@ func TestRunAccessCheck(t *testing.T) { test.o.Out = ioutil.Discard test.o.Err = ioutil.Discard - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "", Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/autoscale.go b/pkg/kubectl/cmd/autoscale.go index c4d2495611e..2f4e5202076 100644 --- a/pkg/kubectl/cmd/autoscale.go +++ b/pkg/kubectl/cmd/autoscale.go @@ -143,7 +143,7 @@ func RunAutoscale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), - Decoder: f.Decoder(true), + Decoder: cmdutil.InternalVersionDecoder(), } hpa, err := resourceMapper.InfoForObject(object, nil) if err != nil { @@ -159,7 +159,7 @@ func RunAutoscale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s return cmdutil.PrintObject(cmd, object, out) } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), hpa, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), hpa, cmdutil.InternalVersionJSONEncoder()); err != nil { return err } diff --git a/pkg/kubectl/cmd/clusterinfo_dump_test.go b/pkg/kubectl/cmd/clusterinfo_dump_test.go index 578d5321525..552a2676496 100644 --- a/pkg/kubectl/cmd/clusterinfo_dump_test.go +++ b/pkg/kubectl/cmd/clusterinfo_dump_test.go @@ -30,7 +30,7 @@ func TestSetupOutputWriterNoOp(t *testing.T) { tests := []string{"", "-"} for _, test := range tests { out := &bytes.Buffer{} - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() cmd := NewCmdClusterInfoDump(f, os.Stdout) cmd.Flag("output-directory").Value.Set(test) writer := setupOutputWriter(cmd, out, "/some/file/that/should/be/ignored") @@ -50,7 +50,7 @@ func TestSetupOutputWriterFile(t *testing.T) { defer os.RemoveAll(dir) out := &bytes.Buffer{} - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() cmd := NewCmdClusterInfoDump(f, os.Stdout) cmd.Flag("output-directory").Value.Set(dir) writer := setupOutputWriter(cmd, out, file) diff --git a/pkg/kubectl/cmd/cmd_test.go b/pkg/kubectl/cmd/cmd_test.go index c2634a47707..f61042dbca6 100644 --- a/pkg/kubectl/cmd/cmd_test.go +++ b/pkg/kubectl/cmd/cmd_test.go @@ -36,6 +36,7 @@ import ( "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/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" @@ -176,7 +177,9 @@ func stringBody(body string) io.ReadCloser { } func Example_printMultiContainersReplicationControllerWithWide() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -224,7 +227,9 @@ func Example_printMultiContainersReplicationControllerWithWide() { } func Example_printReplicationController() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -271,7 +276,9 @@ func Example_printReplicationController() { } func Example_printPodWithWideFormat() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -307,7 +314,9 @@ func Example_printPodWithWideFormat() { } func Example_printPodWithShowLabels() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -438,7 +447,9 @@ func newAllPhasePodList() *api.PodList { } func Example_printPodHideTerminated() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -470,7 +481,9 @@ func Example_printPodHideTerminated() { } func Example_printPodShowAll() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, @@ -491,7 +504,9 @@ func Example_printPodShowAll() { } func Example_printServiceWithLabels() { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: nil, diff --git a/pkg/kubectl/cmd/convert.go b/pkg/kubectl/cmd/convert.go index 1b7ad91c781..3a094b91787 100644 --- a/pkg/kubectl/cmd/convert.go +++ b/pkg/kubectl/cmd/convert.go @@ -96,7 +96,6 @@ type ConvertOptions struct { builder *resource.Builder local bool - encoder runtime.Encoder out io.Writer printer printers.ResourcePrinter @@ -155,7 +154,6 @@ func (o *ConvertOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.C // TODO: once printing is abstracted, this should be handled at flag declaration time cmd.Flags().Set("output", outputFormat) } - o.encoder = f.JSONEncoder() o.printer, err = cmdutil.PrinterForOptions(cmdutil.ExtractCmdPrintOptions(cmd, false)) return err } @@ -178,7 +176,7 @@ func (o *ConvertOptions) RunConvert() error { return fmt.Errorf("no objects passed to convert") } - objects, err := asVersionedObject(infos, !singleItemImplied, o.specifiedOutputVersion, o.encoder) + objects, err := asVersionedObject(infos, !singleItemImplied, o.specifiedOutputVersion, cmdutil.InternalVersionJSONEncoder()) if err != nil { return err } diff --git a/pkg/kubectl/cmd/convert_test.go b/pkg/kubectl/cmd/convert_test.go index 249fc4ef272..a79a24d001d 100644 --- a/pkg/kubectl/cmd/convert_test.go +++ b/pkg/kubectl/cmd/convert_test.go @@ -101,7 +101,7 @@ func TestConvertObject(t *testing.T) { for _, tc := range testcases { for _, field := range tc.fields { t.Run(fmt.Sprintf("%s %s", tc.name, field), func(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { t.Fatalf("unexpected request: %#v\n%#v", req.URL, req) diff --git a/pkg/kubectl/cmd/create.go b/pkg/kubectl/cmd/create.go index d5b95b4beea..43437c2cb2f 100644 --- a/pkg/kubectl/cmd/create.go +++ b/pkg/kubectl/cmd/create.go @@ -191,7 +191,7 @@ func (o *CreateOptions) RunCreate(f cmdutil.Factory, cmd *cobra.Command) error { if err != nil { return err } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return cmdutil.AddSourceToErr("creating", info.Source, err) } @@ -339,7 +339,7 @@ func RunCreateSubcommand(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, o if err != nil { return err } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return err } obj = info.Object diff --git a/pkg/kubectl/cmd/create_clusterrole_test.go b/pkg/kubectl/cmd/create_clusterrole_test.go index 758c168c2d6..d74934a9840 100644 --- a/pkg/kubectl/cmd/create_clusterrole_test.go +++ b/pkg/kubectl/cmd/create_clusterrole_test.go @@ -32,7 +32,7 @@ import ( func TestCreateClusterRole(t *testing.T) { clusterRoleName := "my-cluster-role" - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.Client = &fake.RESTClient{} tf.ClientConfig = defaultClientConfig() @@ -147,7 +147,7 @@ func TestCreateClusterRole(t *testing.T) { } func TestClusterRoleValidate(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tests := map[string]struct { diff --git a/pkg/kubectl/cmd/create_clusterrolebinding_test.go b/pkg/kubectl/cmd/create_clusterrolebinding_test.go index 3601e16f875..0c433066f37 100644 --- a/pkg/kubectl/cmd/create_clusterrolebinding_test.go +++ b/pkg/kubectl/cmd/create_clusterrolebinding_test.go @@ -30,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -66,7 +67,8 @@ func TestCreateClusterRoleBinding(t *testing.T) { }, } - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs info, _ := runtime.SerializerInfoForMediaType(ns.SupportedMediaTypes(), runtime.ContentTypeJSON) encoder := ns.EncoderForVersion(info.Serializer, groupVersion) diff --git a/pkg/kubectl/cmd/create_configmap_test.go b/pkg/kubectl/cmd/create_configmap_test.go index b15f0f6e078..60702f64caf 100644 --- a/pkg/kubectl/cmd/create_configmap_test.go +++ b/pkg/kubectl/cmd/create_configmap_test.go @@ -24,13 +24,18 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateConfigMap(t *testing.T) { configMap := &v1.ConfigMap{} configMap.Name = "my-configmap" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "", Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_deployment_test.go b/pkg/kubectl/cmd/create_deployment_test.go index 4b59e92d48d..27541466726 100644 --- a/pkg/kubectl/cmd/create_deployment_test.go +++ b/pkg/kubectl/cmd/create_deployment_test.go @@ -26,6 +26,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -73,7 +74,9 @@ func Test_generatorFromName(t *testing.T) { func TestCreateDeployment(t *testing.T) { depName := "jonny-dep" - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -100,7 +103,9 @@ func TestCreateDeployment(t *testing.T) { func TestCreateDeploymentNoImage(t *testing.T) { depName := "jonny-dep" - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/create_namespace_test.go b/pkg/kubectl/cmd/create_namespace_test.go index aa19454da67..43cca404749 100644 --- a/pkg/kubectl/cmd/create_namespace_test.go +++ b/pkg/kubectl/cmd/create_namespace_test.go @@ -24,13 +24,18 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateNamespace(t *testing.T) { namespaceObject := &v1.Namespace{} namespaceObject.Name = "my-namespace" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_pdb_test.go b/pkg/kubectl/cmd/create_pdb_test.go index 928fb481951..f78b57057e7 100644 --- a/pkg/kubectl/cmd/create_pdb_test.go +++ b/pkg/kubectl/cmd/create_pdb_test.go @@ -25,12 +25,15 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreatePdb(t *testing.T) { pdbName := "my-pdb" - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "policy", Version: "v1beta1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_priorityclass_test.go b/pkg/kubectl/cmd/create_priorityclass_test.go index 6a4aa28fb1a..27eaca7c298 100644 --- a/pkg/kubectl/cmd/create_priorityclass_test.go +++ b/pkg/kubectl/cmd/create_priorityclass_test.go @@ -25,12 +25,15 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) func TestCreatePriorityClass(t *testing.T) { pcName := "my-pc" - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Group: "scheduling.k8s.io", Version: "v1alpha1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_quota_test.go b/pkg/kubectl/cmd/create_quota_test.go index fafe6ab4d35..e0d942c0c29 100644 --- a/pkg/kubectl/cmd/create_quota_test.go +++ b/pkg/kubectl/cmd/create_quota_test.go @@ -24,13 +24,18 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateQuota(t *testing.T) { resourceQuotaObject := &v1.ResourceQuota{} resourceQuotaObject.Name = "my-quota" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_role_test.go b/pkg/kubectl/cmd/create_role_test.go index 5d9f701c663..4de396789bc 100644 --- a/pkg/kubectl/cmd/create_role_test.go +++ b/pkg/kubectl/cmd/create_role_test.go @@ -34,7 +34,7 @@ import ( func TestCreateRole(t *testing.T) { roleName := "my-role" - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.Client = &fake.RESTClient{} tf.ClientConfig = defaultClientConfig() @@ -146,7 +146,7 @@ func TestCreateRole(t *testing.T) { } func TestValidate(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tests := map[string]struct { @@ -345,7 +345,7 @@ func TestValidate(t *testing.T) { func TestComplete(t *testing.T) { roleName := "my-role" - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.Client = &fake.RESTClient{} tf.ClientConfig = defaultClientConfig() diff --git a/pkg/kubectl/cmd/create_rolebinding_test.go b/pkg/kubectl/cmd/create_rolebinding_test.go index 90ccdb4d85b..d4c9c068b5c 100644 --- a/pkg/kubectl/cmd/create_rolebinding_test.go +++ b/pkg/kubectl/cmd/create_rolebinding_test.go @@ -30,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -68,7 +69,8 @@ func TestCreateRoleBinding(t *testing.T) { }, } - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs info, _ := runtime.SerializerInfoForMediaType(ns.SupportedMediaTypes(), runtime.ContentTypeJSON) encoder := ns.EncoderForVersion(info.Serializer, groupVersion) diff --git a/pkg/kubectl/cmd/create_secret_test.go b/pkg/kubectl/cmd/create_secret_test.go index 5d8de0a3e52..2160eff3afa 100644 --- a/pkg/kubectl/cmd/create_secret_test.go +++ b/pkg/kubectl/cmd/create_secret_test.go @@ -24,7 +24,9 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateSecretGeneric(t *testing.T) { @@ -35,7 +37,10 @@ func TestCreateSecretGeneric(t *testing.T) { }, } secretObject.Name = "my-secret" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, @@ -65,7 +70,10 @@ func TestCreateSecretGeneric(t *testing.T) { func TestCreateSecretDockerRegistry(t *testing.T) { secretObject := &v1.Secret{} secretObject.Name = "my-secret" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_service_test.go b/pkg/kubectl/cmd/create_service_test.go index 296778510f4..ef1d7b0deb2 100644 --- a/pkg/kubectl/cmd/create_service_test.go +++ b/pkg/kubectl/cmd/create_service_test.go @@ -24,13 +24,18 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateService(t *testing.T) { service := &v1.Service{} service.Name = "my-service" - f, tf, codec, negSer := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + negSer := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, @@ -59,7 +64,10 @@ func TestCreateService(t *testing.T) { func TestCreateServiceNodePort(t *testing.T) { service := &v1.Service{} service.Name = "my-node-port-service" - f, tf, codec, negSer := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + negSer := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, @@ -88,7 +96,10 @@ func TestCreateServiceNodePort(t *testing.T) { func TestCreateServiceExternalName(t *testing.T) { service := &v1.Service{} service.Name = "my-external-name-service" - f, tf, codec, negSer := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + negSer := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: negSer, diff --git a/pkg/kubectl/cmd/create_serviceaccount_test.go b/pkg/kubectl/cmd/create_serviceaccount_test.go index 14d1f228110..7c761098e04 100644 --- a/pkg/kubectl/cmd/create_serviceaccount_test.go +++ b/pkg/kubectl/cmd/create_serviceaccount_test.go @@ -24,13 +24,18 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestCreateServiceAccount(t *testing.T) { serviceAccountObject := &v1.ServiceAccount{} serviceAccountObject.Name = "my-service-account" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/create_test.go b/pkg/kubectl/cmd/create_test.go index 4cb1b51fb9b..703c5423829 100644 --- a/pkg/kubectl/cmd/create_test.go +++ b/pkg/kubectl/cmd/create_test.go @@ -23,7 +23,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestExtraArgsFail(t *testing.T) { @@ -31,7 +33,7 @@ func TestExtraArgsFail(t *testing.T) { buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() c := NewCmdCreate(f, buf, errBuf) options := CreateOptions{} if options.ValidateArgs(c, []string{"rc"}) == nil { @@ -44,7 +46,9 @@ func TestCreateObject(t *testing.T) { _, _, rc := testData() rc.Items[0].Name = "redis-master-controller" - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -77,7 +81,9 @@ func TestCreateMultipleObject(t *testing.T) { initTestErrorHandler(t) _, svc, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -114,7 +120,9 @@ func TestCreateDirectory(t *testing.T) { _, _, rc := testData() rc.Items[0].Name = "name" - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, diff --git a/pkg/kubectl/cmd/delete_test.go b/pkg/kubectl/cmd/delete_test.go index 2b016cf32c5..07f520e3798 100644 --- a/pkg/kubectl/cmd/delete_test.go +++ b/pkg/kubectl/cmd/delete_test.go @@ -33,11 +33,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/kubectl" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) var unstructuredSerializer = dynamic.ContentConfig().NegotiatedSerializer @@ -54,7 +56,9 @@ func TestDeleteObjectByTuple(t *testing.T) { initTestErrorHandler(t) _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -116,7 +120,9 @@ func TestOrphanDependentsInDeleteObject(t *testing.T) { initTestErrorHandler(t) _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + var expectedOrphanDependents *bool tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -164,7 +170,9 @@ func TestDeleteNamedObject(t *testing.T) { initTestErrorHandler(t) _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -213,7 +221,9 @@ func TestDeleteObject(t *testing.T) { initTestErrorHandler(t) _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -270,7 +280,9 @@ func TestDeleteObjectGraceZero(t *testing.T) { objectDeletionWaitInterval = time.Millisecond count := 0 - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -318,7 +330,7 @@ func TestDeleteObjectGraceZero(t *testing.T) { func TestDeleteObjectNotFound(t *testing.T) { initTestErrorHandler(t) - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -354,7 +366,7 @@ func TestDeleteObjectNotFound(t *testing.T) { func TestDeleteObjectIgnoreNotFound(t *testing.T) { initTestErrorHandler(t) - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -389,7 +401,8 @@ func TestDeleteAllNotFound(t *testing.T) { svc.Items = append(svc.Items, api.Service{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}) notFoundError := &errors.NewNotFound(api.Resource("services"), "foo").ErrStatus - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -433,7 +446,8 @@ func TestDeleteAllIgnoreNotFound(t *testing.T) { initTestErrorHandler(t) _, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) // Add an item to the list which will result in a 404 on delete svc.Items = append(svc.Items, api.Service{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}) @@ -473,7 +487,9 @@ func TestDeleteMultipleObject(t *testing.T) { initTestErrorHandler(t) _, svc, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -507,7 +523,9 @@ func TestDeleteMultipleObjectContinueOnMissing(t *testing.T) { initTestErrorHandler(t) _, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -550,7 +568,9 @@ func TestDeleteMultipleObjectContinueOnMissing(t *testing.T) { func TestDeleteMultipleResourcesWithTheSameName(t *testing.T) { initTestErrorHandler(t) _, svc, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -587,7 +607,9 @@ func TestDeleteDirectory(t *testing.T) { initTestErrorHandler(t) _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -618,7 +640,9 @@ func TestDeleteMultipleSelector(t *testing.T) { initTestErrorHandler(t) pods, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -682,7 +706,7 @@ func TestResourceErrors(t *testing.T) { } for k, testCase := range testCases { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.ClientConfig = defaultClientConfig() diff --git a/pkg/kubectl/cmd/describe_test.go b/pkg/kubectl/cmd/describe_test.go index 5c068609d35..a8c074f4eac 100644 --- a/pkg/kubectl/cmd/describe_test.go +++ b/pkg/kubectl/cmd/describe_test.go @@ -24,13 +24,16 @@ import ( "testing" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. func TestDescribeUnknownSchemaObject(t *testing.T) { d := &testDescriber{Output: "test output"} - f, tf, codec, _ := cmdtesting.NewTestFactory() + f, tf := cmdtesting.NewTestFactory() + _, _, codec := cmdtesting.NewExternalScheme() tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -54,7 +57,9 @@ func TestDescribeUnknownSchemaObject(t *testing.T) { // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) { d := &testDescriber{Output: "test output"} - f, tf, codec, _ := cmdtesting.NewTestFactory() + f, tf := cmdtesting.NewTestFactory() + _, _, codec := cmdtesting.NewExternalScheme() + tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -77,7 +82,9 @@ func TestDescribeUnknownNamespacedSchemaObject(t *testing.T) { func TestDescribeObject(t *testing.T) { _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ @@ -110,7 +117,9 @@ func TestDescribeObject(t *testing.T) { func TestDescribeListObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ @@ -130,7 +139,9 @@ func TestDescribeListObjects(t *testing.T) { func TestDescribeObjectShowEvents(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ @@ -151,7 +162,9 @@ func TestDescribeObjectShowEvents(t *testing.T) { func TestDescribeObjectSkipEvents(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + d := &testDescriber{Output: "test output"} tf.Describer = d tf.UnstructuredClient = &fake.RESTClient{ @@ -171,7 +184,7 @@ func TestDescribeObjectSkipEvents(t *testing.T) { } func TestDescribeHelpMessage(t *testing.T) { - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() buf := bytes.NewBuffer([]byte{}) buferr := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/diff.go b/pkg/kubectl/cmd/diff.go index 98fe4d6151d..490db667c25 100644 --- a/pkg/kubectl/cmd/diff.go +++ b/pkg/kubectl/cmd/diff.go @@ -439,7 +439,7 @@ func RunDiff(f cmdutil.Factory, diff *DiffProgram, options *DiffOptions, from, t obj := InfoObject{ Info: info, Parser: parser, - Encoder: f.JSONEncoder(), + Encoder: cmdutil.InternalVersionJSONEncoder(), } return differ.Diff(obj, printer) diff --git a/pkg/kubectl/cmd/drain_test.go b/pkg/kubectl/cmd/drain_test.go index c4543ec2dba..cb9d26d5816 100644 --- a/pkg/kubectl/cmd/drain_test.go +++ b/pkg/kubectl/cmd/drain_test.go @@ -50,6 +50,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) const ( @@ -149,7 +150,10 @@ func TestCordon(t *testing.T) { } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + new_node := &corev1.Node{} updated := false tf.Client = &fake.RESTClient{ @@ -596,7 +600,10 @@ func TestDrain(t *testing.T) { new_node := &corev1.Node{} deleted := false evicted := false - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: ns, @@ -817,7 +824,7 @@ func TestDeletePods(t *testing.T) { } for _, test := range tests { - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() o := DrainOptions{Factory: f} o.mapper, _ = f.Object() o.Out = os.Stdout diff --git a/pkg/kubectl/cmd/edit_test.go b/pkg/kubectl/cmd/edit_test.go index 4e844fdd5a2..955bd694b72 100644 --- a/pkg/kubectl/cmd/edit_test.go +++ b/pkg/kubectl/cmd/edit_test.go @@ -206,7 +206,7 @@ func TestEdit(t *testing.T) { t.Fatalf("%s: %v", name, err) } - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClientForMappingFunc = func(mapping *meta.RESTMapping) (resource.RESTClient, error) { versionedAPIPath := "" if mapping.GroupVersionKind.Group == "" { diff --git a/pkg/kubectl/cmd/exec_test.go b/pkg/kubectl/cmd/exec_test.go index c327b731b0d..add8306f38d 100644 --- a/pkg/kubectl/cmd/exec_test.go +++ b/pkg/kubectl/cmd/exec_test.go @@ -33,8 +33,10 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/client-go/tools/remotecommand" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/term" ) @@ -128,7 +130,9 @@ func TestPodAndContainer(t *testing.T) { }, } for _, test := range tests { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return nil, nil }), @@ -182,7 +186,10 @@ func TestExec(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/expose.go b/pkg/kubectl/cmd/expose.go index 590e9004de1..c511215ad39 100644 --- a/pkg/kubectl/cmd/expose.go +++ b/pkg/kubectl/cmd/expose.go @@ -230,7 +230,7 @@ func RunExpose(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri } if inline := cmdutil.GetFlagString(cmd, "overrides"); len(inline) > 0 { - codec := runtime.NewCodec(f.JSONEncoder(), f.Decoder(true)) + codec := runtime.NewCodec(cmdutil.InternalVersionJSONEncoder(), cmdutil.InternalVersionDecoder()) object, err = cmdutil.Merge(codec, object, inline) if err != nil { return err @@ -241,7 +241,7 @@ func RunExpose(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), - Decoder: f.Decoder(true), + Decoder: cmdutil.InternalVersionDecoder(), } info, err = resourceMapper.InfoForObject(object, nil) if err != nil { @@ -260,7 +260,7 @@ func RunExpose(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri cmdutil.PrintSuccess(false, out, info.Object, true, "exposed") return nil } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return err } diff --git a/pkg/kubectl/cmd/expose_test.go b/pkg/kubectl/cmd/expose_test.go index 0489af42b7f..3cf6e6e4438 100644 --- a/pkg/kubectl/cmd/expose_test.go +++ b/pkg/kubectl/cmd/expose_test.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -465,7 +466,10 @@ func TestRunExposeService(t *testing.T) { } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/label_test.go b/pkg/kubectl/cmd/label_test.go index 49c89c266f8..5fbd334055c 100644 --- a/pkg/kubectl/cmd/label_test.go +++ b/pkg/kubectl/cmd/label_test.go @@ -27,8 +27,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestValidateLabels(t *testing.T) { @@ -319,7 +321,7 @@ func TestLabelErrors(t *testing.T) { } for k, testCase := range testCases { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tf.ClientConfig = defaultClientConfig() @@ -350,7 +352,9 @@ func TestLabelErrors(t *testing.T) { func TestLabelForResourceFromFile(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -400,7 +404,7 @@ func TestLabelForResourceFromFile(t *testing.T) { } func TestLabelLocal(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -433,7 +437,9 @@ func TestLabelLocal(t *testing.T) { func TestLabelMultipleObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/logs_test.go b/pkg/kubectl/cmd/logs_test.go index 026b899f7c1..7cc7ec3387c 100644 --- a/pkg/kubectl/cmd/logs_test.go +++ b/pkg/kubectl/cmd/logs_test.go @@ -28,8 +28,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestLog(t *testing.T) { @@ -47,7 +49,10 @@ func TestLog(t *testing.T) { } for _, test := range tests { logContent := "test log content" - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -95,7 +100,7 @@ func testPod() *api.Pod { } func TestValidateLogFlags(t *testing.T) { - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() tests := []struct { name string @@ -145,7 +150,7 @@ func TestValidateLogFlags(t *testing.T) { } func TestLogComplete(t *testing.T) { - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() tests := []struct { name string diff --git a/pkg/kubectl/cmd/patch_test.go b/pkg/kubectl/cmd/patch_test.go index 77de7253e49..7beab48685e 100644 --- a/pkg/kubectl/cmd/patch_test.go +++ b/pkg/kubectl/cmd/patch_test.go @@ -23,13 +23,17 @@ import ( "testing" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestPatchObject(t *testing.T) { _, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -67,7 +71,9 @@ func TestPatchObject(t *testing.T) { func TestPatchObjectFromFile(t *testing.T) { _, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -101,7 +107,9 @@ func TestPatchNoop(t *testing.T) { getObject := &svc.Items[0] patchObject := &svc.Items[0] - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -145,7 +153,9 @@ func TestPatchObjectFromFileOutput(t *testing.T) { } svcCopy.Labels["post-patch"] = "post-patch-value" - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/plugin_test.go b/pkg/kubectl/cmd/plugin_test.go index 439ebea56e9..58267eaf1a5 100644 --- a/pkg/kubectl/cmd/plugin_test.go +++ b/pkg/kubectl/cmd/plugin_test.go @@ -92,7 +92,7 @@ func TestPluginCmd(t *testing.T) { success: test.expectedSuccess, } - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() cmd := NewCmdForPlugin(f, test.plugin, runner, inBuf, outBuf, errBuf) if cmd == nil { if !test.expectedNilCmd { diff --git a/pkg/kubectl/cmd/portforward_test.go b/pkg/kubectl/cmd/portforward_test.go index 8a4568ffbf5..f2d0eba3926 100644 --- a/pkg/kubectl/cmd/portforward_test.go +++ b/pkg/kubectl/cmd/portforward_test.go @@ -29,8 +29,10 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) type fakePortForwarder struct { @@ -70,7 +72,10 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) { } for _, test := range tests { var err error - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ VersionedAPIPath: "/api/v1", GroupVersion: schema.GroupVersion{Group: ""}, diff --git a/pkg/kubectl/cmd/replace.go b/pkg/kubectl/cmd/replace.go index 7d3e538e0c4..6cd6247a35c 100644 --- a/pkg/kubectl/cmd/replace.go +++ b/pkg/kubectl/cmd/replace.go @@ -137,7 +137,7 @@ func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str return err } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return cmdutil.AddSourceToErr("replacing", info.Source, err) } @@ -259,7 +259,7 @@ func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s return err } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return err } diff --git a/pkg/kubectl/cmd/replace_test.go b/pkg/kubectl/cmd/replace_test.go index a3520ede808..4e2f7c6b9d4 100644 --- a/pkg/kubectl/cmd/replace_test.go +++ b/pkg/kubectl/cmd/replace_test.go @@ -23,14 +23,18 @@ import ( "testing" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestReplaceObject(t *testing.T) { _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + deleted := false tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -84,7 +88,9 @@ func TestReplaceObject(t *testing.T) { func TestReplaceMultipleObject(t *testing.T) { _, svc, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + redisMasterDeleted := false frontendDeleted := false tf.UnstructuredClient = &fake.RESTClient{ @@ -152,7 +158,9 @@ func TestReplaceMultipleObject(t *testing.T) { func TestReplaceDirectory(t *testing.T) { _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + created := map[string]bool{} tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -207,7 +215,9 @@ func TestReplaceDirectory(t *testing.T) { func TestForceReplaceObjectNotFound(t *testing.T) { _, _, rc := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/resource/BUILD b/pkg/kubectl/cmd/resource/BUILD index 1b364d48205..c0c608e7667 100644 --- a/pkg/kubectl/cmd/resource/BUILD +++ b/pkg/kubectl/cmd/resource/BUILD @@ -39,6 +39,7 @@ go_test( ], embed = [":go_default_library"], deps = [ + "//pkg/api/legacyscheme:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", diff --git a/pkg/kubectl/cmd/resource/get.go b/pkg/kubectl/cmd/resource/get.go index 37640d82ea4..36ee3303a9c 100644 --- a/pkg/kubectl/cmd/resource/get.go +++ b/pkg/kubectl/cmd/resource/get.go @@ -295,7 +295,7 @@ func (options *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []str var sorter *kubectl.RuntimeSort if len(sorting) > 0 && len(objs) > 1 { // TODO: questionable - if sorter, err = kubectl.SortObjects(f.Decoder(true), objs, sorting); err != nil { + if sorter, err = kubectl.SortObjects(cmdutil.InternalVersionDecoder(), objs, sorting); err != nil { return err } } diff --git a/pkg/kubectl/cmd/resource/get_test.go b/pkg/kubectl/cmd/resource/get_test.go index 4a245cc26f3..a56f18f15e7 100644 --- a/pkg/kubectl/cmd/resource/get_test.go +++ b/pkg/kubectl/cmd/resource/get_test.go @@ -46,6 +46,7 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/v1" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" @@ -196,9 +197,8 @@ func testComponentStatusData() *api.ComponentStatusList { // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. func TestGetUnknownSchemaObject(t *testing.T) { t.Skip("This test is completely broken. The first thing it does is add the object to the scheme!") - f, tf, _, _ := cmdtesting.NewAPIFactory() - tf.WithCustomScheme() - _, _, codec, _ := cmdtesting.NewTestFactory() + f, tf := cmdtesting.NewAPIFactory() + _, _, codec := cmdtesting.NewExternalScheme() tf.OpenAPISchemaFunc = openapitesting.CreateOpenAPISchemaFunc(openapiSchemaPath) obj := &cmdtesting.ExternalType{ @@ -271,9 +271,7 @@ func TestGetUnknownSchemaObject(t *testing.T) { // Verifies that schemas that are not in the master tree of Kubernetes can be retrieved via Get. func TestGetSchemaObject(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() - tf.Mapper = testapi.Default.RESTMapper() - tf.Typer = scheme.Scheme + f, tf := cmdtesting.NewAPIFactory() codec := testapi.Default.Codec() tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, @@ -295,7 +293,9 @@ func TestGetSchemaObject(t *testing.T) { func TestGetObjectsWithOpenAPIOutputFormatPresent(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + // overide the openAPISchema function to return custom output // for Pod type. tf.OpenAPISchemaFunc = testOpenAPISchemaData @@ -350,7 +350,9 @@ func testOpenAPISchemaData() (openapi.Resources, error) { func TestGetObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, @@ -398,8 +400,9 @@ func TestGetObjectsFiltered(t *testing.T) { for i, test := range testCases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - f, tf, codec, _ := cmdtesting.NewAPIFactory() - tf.WithLegacyScheme() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: unstructuredSerializer, @@ -439,7 +442,9 @@ func TestGetObjectIgnoreNotFound(t *testing.T) { }, } - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -490,7 +495,9 @@ func TestGetSortedObjects(t *testing.T) { }, } - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, @@ -521,7 +528,9 @@ c 0/0 0 func TestGetObjectsIdentifiedByFile(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, @@ -546,7 +555,9 @@ foo 0/0 0 func TestGetListObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, @@ -571,7 +582,9 @@ bar 0/0 0 func TestGetAllListObjects(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, pods)}, @@ -597,7 +610,9 @@ bar 0/0 0 func TestGetListComponentStatus(t *testing.T) { statuses := testComponentStatusData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, statuses)}, @@ -636,7 +651,9 @@ func TestGetMixedGenericObjects(t *testing.T) { Code: 0, } - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -684,7 +701,9 @@ func TestGetMixedGenericObjects(t *testing.T) { func TestGetMultipleTypeObjects(t *testing.T) { pods, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -721,7 +740,9 @@ baz ClusterIP func TestGetMultipleTypeObjectsAsList(t *testing.T) { pods, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -821,7 +842,9 @@ func TestGetMultipleTypeObjectsAsList(t *testing.T) { func TestGetMultipleTypeObjectsWithLabelSelector(t *testing.T) { pods, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -863,7 +886,9 @@ baz ClusterIP func TestGetMultipleTypeObjectsWithFieldSelector(t *testing.T) { pods, svc, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -913,7 +938,9 @@ func TestGetMultipleTypeObjectsWithDirectReference(t *testing.T) { }, } - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -950,7 +977,9 @@ foo Unknown func TestGetByFormatForcesFlag(t *testing.T) { pods, _, _ := testData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, &pods.Items[0])}, @@ -1043,7 +1072,9 @@ func watchTestData() ([]api.Pod, []watch.Event) { func TestWatchLabelSelector(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + podList := &api.PodList{ Items: pods, ListMeta: metav1.ListMeta{ @@ -1093,7 +1124,9 @@ foo 0/0 0 func TestWatchFieldSelector(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + podList := &api.PodList{ Items: pods, ListMeta: metav1.ListMeta{ @@ -1143,7 +1176,9 @@ foo 0/0 0 func TestWatchResource(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -1185,7 +1220,9 @@ foo 0/0 0 func TestWatchResourceIdentifiedByFile(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -1228,7 +1265,9 @@ foo 0/0 0 func TestWatchOnlyResource(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + tf.UnstructuredClient = &fake.RESTClient{ NegotiatedSerializer: unstructuredSerializer, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -1269,7 +1308,9 @@ foo 0/0 0 func TestWatchOnlyList(t *testing.T) { pods, events := watchTestData() - f, tf, codec, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + podList := &api.PodList{ Items: pods, ListMeta: metav1.ListMeta{ diff --git a/pkg/kubectl/cmd/rollingupdate_test.go b/pkg/kubectl/cmd/rollingupdate_test.go index 1a13c335e6e..4260473580b 100644 --- a/pkg/kubectl/cmd/rollingupdate_test.go +++ b/pkg/kubectl/cmd/rollingupdate_test.go @@ -24,7 +24,7 @@ import ( ) func TestValidateArgs(t *testing.T) { - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() tests := []struct { testName string diff --git a/pkg/kubectl/cmd/rollout/rollout_pause.go b/pkg/kubectl/cmd/rollout/rollout_pause.go index e296c47ccd0..933b7686857 100644 --- a/pkg/kubectl/cmd/rollout/rollout_pause.go +++ b/pkg/kubectl/cmd/rollout/rollout_pause.go @@ -39,11 +39,10 @@ import ( type PauseConfig struct { resource.FilenameOptions - Pauser func(info *resource.Info) ([]byte, error) - Mapper meta.RESTMapper - Typer runtime.ObjectTyper - Encoder runtime.Encoder - Infos []*resource.Info + Pauser func(info *resource.Info) ([]byte, error) + Mapper meta.RESTMapper + Typer runtime.ObjectTyper + Infos []*resource.Info Out io.Writer } @@ -102,7 +101,6 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out i } o.Mapper, o.Typer = f.Object() - o.Encoder = f.JSONEncoder() o.Pauser = f.Pauser o.Out = out @@ -135,7 +133,7 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out i func (o PauseConfig) RunPause() error { allErrs := []error{} - for _, patch := range set.CalculatePatches(o.Infos, o.Encoder, o.Pauser) { + for _, patch := range set.CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), o.Pauser) { info := patch.Info if patch.Err != nil { allErrs = append(allErrs, fmt.Errorf("error: %s %q %v", info.Mapping.Resource, info.Name, patch.Err)) diff --git a/pkg/kubectl/cmd/rollout/rollout_resume.go b/pkg/kubectl/cmd/rollout/rollout_resume.go index 8eedbce18b2..a578292238a 100644 --- a/pkg/kubectl/cmd/rollout/rollout_resume.go +++ b/pkg/kubectl/cmd/rollout/rollout_resume.go @@ -42,7 +42,6 @@ type ResumeConfig struct { Resumer func(object *resource.Info) ([]byte, error) Mapper meta.RESTMapper Typer runtime.ObjectTyper - Encoder runtime.Encoder Infos []*resource.Info Out io.Writer @@ -100,7 +99,6 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out } o.Mapper, o.Typer = f.Object() - o.Encoder = f.JSONEncoder() o.Resumer = f.Resumer o.Out = out @@ -139,7 +137,7 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out func (o ResumeConfig) RunResume() error { allErrs := []error{} - for _, patch := range set.CalculatePatches(o.Infos, o.Encoder, o.Resumer) { + for _, patch := range set.CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), o.Resumer) { info := patch.Info if patch.Err != nil { diff --git a/pkg/kubectl/cmd/run.go b/pkg/kubectl/cmd/run.go index f4c97d212c7..46c98e8ebd9 100644 --- a/pkg/kubectl/cmd/run.go +++ b/pkg/kubectl/cmd/run.go @@ -590,7 +590,7 @@ func createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator kube groupVersionKind := groupVersionKinds[0] if len(overrides) > 0 { - codec := runtime.NewCodec(f.JSONEncoder(), f.Decoder(true)) + codec := runtime.NewCodec(cmdutil.InternalVersionJSONEncoder(), cmdutil.InternalVersionDecoder()) obj, err = cmdutil.Merge(codec, obj, overrides) if err != nil { return nil, err @@ -620,14 +620,14 @@ func createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command, generator kube ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), - Decoder: f.Decoder(true), + Decoder: cmdutil.InternalVersionDecoder(), } info, err := resourceMapper.InfoForObject(obj, nil) if err != nil { return nil, err } - if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, f.JSONEncoder()); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(cmdutil.GetFlagBool(cmd, cmdutil.ApplyAnnotationsFlag), info, cmdutil.InternalVersionJSONEncoder()); err != nil { return nil, err } diff --git a/pkg/kubectl/cmd/run_test.go b/pkg/kubectl/cmd/run_test.go index 08740ca2285..dc701ea526e 100644 --- a/pkg/kubectl/cmd/run_test.go +++ b/pkg/kubectl/cmd/run_test.go @@ -35,6 +35,7 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -167,7 +168,10 @@ func TestRunArgsFollowDashRules(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, NegotiatedSerializer: ns, @@ -289,7 +293,10 @@ func TestGenerateService(t *testing.T) { } for _, test := range tests { sawPOST := false - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.ClientConfig = defaultClientConfig() tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, @@ -430,9 +437,10 @@ func TestRunValidations(t *testing.T) { }, } for _, test := range tests { - f, tf, codec, ns := cmdtesting.NewTestFactory() + f, tf := cmdtesting.NewTestFactory() + _, _, codec := cmdtesting.NewExternalScheme() tf.Client = &fake.RESTClient{ - NegotiatedSerializer: ns, + NegotiatedSerializer: scheme.Codecs, Resp: &http.Response{StatusCode: 200, Header: defaultHeader(), Body: objBody(codec, cmdtesting.NewInternalType("", "", ""))}, } tf.Namespace = "test" diff --git a/pkg/kubectl/cmd/set/BUILD b/pkg/kubectl/cmd/set/BUILD index 14f26906bf7..75ef3e4da79 100644 --- a/pkg/kubectl/cmd/set/BUILD +++ b/pkg/kubectl/cmd/set/BUILD @@ -58,6 +58,7 @@ go_test( ], embed = [":go_default_library"], deps = [ + "//pkg/api/legacyscheme:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/kubectl/categories:go_default_library", diff --git a/pkg/kubectl/cmd/set/set_env.go b/pkg/kubectl/cmd/set/set_env.go index 41ae75b0f95..6cbaf21f0df 100644 --- a/pkg/kubectl/cmd/set/set_env.go +++ b/pkg/kubectl/cmd/set/set_env.go @@ -117,7 +117,6 @@ type EnvOptions struct { Builder *resource.Builder Infos []*resource.Info - Encoder runtime.Encoder Cmd *cobra.Command @@ -187,7 +186,6 @@ func (o *EnvOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []stri } o.UpdatePodSpecForObject = f.UpdatePodSpecForObject - o.Encoder = f.JSONEncoder() o.ContainerSelector = cmdutil.GetFlagString(cmd, "containers") o.List = cmdutil.GetFlagBool(cmd, "list") o.Resolve = cmdutil.GetFlagBool(cmd, "resolve") @@ -320,7 +318,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error { if err != nil { return err } - patches := CalculatePatches(o.Infos, o.Encoder, func(info *resource.Info) ([]byte, error) { + patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) { info.Object = info.AsVersioned() _, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error { resolutionErrorsEncountered := false @@ -388,7 +386,7 @@ func (o *EnvOptions) RunEnv(f cmdutil.Factory) error { }) if err == nil { - return runtime.Encode(o.Encoder, info.Object) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object) } return nil, err }) diff --git a/pkg/kubectl/cmd/set/set_env_test.go b/pkg/kubectl/cmd/set/set_env_test.go index c17cfb82493..9d2a22c804d 100644 --- a/pkg/kubectl/cmd/set/set_env_test.go +++ b/pkg/kubectl/cmd/set/set_env_test.go @@ -38,6 +38,7 @@ import ( "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/api/testapi" "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" @@ -46,7 +47,8 @@ import ( ) func TestSetEnvLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -81,7 +83,9 @@ func TestSetEnvLocal(t *testing.T) { } func TestSetMultiResourcesEnvLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -428,8 +432,9 @@ func TestSetEnvRemote(t *testing.T) { for _, input := range inputs { groupVersion := schema.GroupVersion{Group: input.apiGroup, Version: input.apiVersion} testapi.Default = testapi.Groups[input.testAPIGroup] - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) + ns := legacyscheme.Codecs tf.Namespace = "test" tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ diff --git a/pkg/kubectl/cmd/set/set_image.go b/pkg/kubectl/cmd/set/set_image.go index 09fc17e798d..7d9ac6a8e0f 100644 --- a/pkg/kubectl/cmd/set/set_image.go +++ b/pkg/kubectl/cmd/set/set_image.go @@ -37,8 +37,6 @@ type ImageOptions struct { resource.FilenameOptions Infos []*resource.Info - Encoder runtime.Encoder - Decoder runtime.Decoder Selector string Out io.Writer Err io.Writer @@ -114,8 +112,6 @@ func NewCmdImage(f cmdutil.Factory, out, err io.Writer) *cobra.Command { func (o *ImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.UpdatePodSpecForObject = f.UpdatePodSpecForObject - o.Encoder = f.JSONEncoder() - o.Decoder = f.Decoder(true) o.ShortOutput = cmdutil.GetFlagString(cmd, "output") == "name" o.Record = cmdutil.GetRecordFlag(cmd) o.ChangeCause = f.Command(cmd, false) @@ -184,7 +180,7 @@ func (o *ImageOptions) Validate() error { func (o *ImageOptions) Run() error { allErrs := []error{} - patches := CalculatePatches(o.Infos, o.Encoder, func(info *resource.Info) ([]byte, error) { + patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) { transformed := false info.Object = info.AsVersioned() _, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error { @@ -224,7 +220,7 @@ func (o *ImageOptions) Run() error { return nil }) if transformed && err == nil { - return runtime.Encode(o.Encoder, info.Object) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object) } return nil, err }) diff --git a/pkg/kubectl/cmd/set/set_image_test.go b/pkg/kubectl/cmd/set/set_image_test.go index 5fb3e3f11b8..25b7ce69a5e 100644 --- a/pkg/kubectl/cmd/set/set_image_test.go +++ b/pkg/kubectl/cmd/set/set_image_test.go @@ -37,6 +37,7 @@ import ( "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/api/testapi" "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" @@ -45,7 +46,9 @@ import ( ) func TestImageLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -146,7 +149,9 @@ func TestSetImageValidation(t *testing.T) { } func TestSetMultiResourcesImageLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -495,8 +500,9 @@ func TestSetImageRemote(t *testing.T) { for _, input := range inputs { groupVersion := schema.GroupVersion{Group: input.apiGroup, Version: input.apiVersion} testapi.Default = testapi.Groups[input.testAPIGroup] - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) + ns := legacyscheme.Codecs tf.Namespace = "test" tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ diff --git a/pkg/kubectl/cmd/set/set_resources.go b/pkg/kubectl/cmd/set/set_resources.go index 8b7dbb6be4a..e696dac06b8 100644 --- a/pkg/kubectl/cmd/set/set_resources.go +++ b/pkg/kubectl/cmd/set/set_resources.go @@ -62,7 +62,6 @@ type ResourcesOptions struct { resource.FilenameOptions Infos []*resource.Info - Encoder runtime.Encoder Out io.Writer Err io.Writer Selector string @@ -125,7 +124,6 @@ func NewCmdResources(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra. func (o *ResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { o.UpdatePodSpecForObject = f.UpdatePodSpecForObject - o.Encoder = f.JSONEncoder() o.Output = cmdutil.GetFlagString(cmd, "output") o.Record = cmdutil.GetRecordFlag(cmd) o.ChangeCause = f.Command(cmd, false) @@ -187,7 +185,7 @@ func (o *ResourcesOptions) Validate() error { func (o *ResourcesOptions) Run() error { allErrs := []error{} - patches := CalculatePatches(o.Infos, o.Encoder, func(info *resource.Info) ([]byte, error) { + patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) { transformed := false info.Object = info.AsVersioned() _, err := o.UpdatePodSpecForObject(info.Object, func(spec *v1.PodSpec) error { @@ -215,7 +213,7 @@ func (o *ResourcesOptions) Run() error { return nil }) if transformed && err == nil { - return runtime.Encode(o.Encoder, info.Object) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object) } return nil, err }) diff --git a/pkg/kubectl/cmd/set/set_resources_test.go b/pkg/kubectl/cmd/set/set_resources_test.go index 00431461567..16713873d8a 100644 --- a/pkg/kubectl/cmd/set/set_resources_test.go +++ b/pkg/kubectl/cmd/set/set_resources_test.go @@ -37,6 +37,7 @@ import ( "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/api/testapi" "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" @@ -45,7 +46,9 @@ import ( ) func TestResourcesLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -87,7 +90,9 @@ func TestResourcesLocal(t *testing.T) { } func TestSetMultiResourcesLimitsLocal(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -441,8 +446,9 @@ func TestSetResourcesRemote(t *testing.T) { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { groupVersion := schema.GroupVersion{Group: input.apiGroup, Version: input.apiVersion} testapi.Default = testapi.Groups[input.testAPIGroup] - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) + ns := legacyscheme.Codecs tf.Namespace = "test" tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ diff --git a/pkg/kubectl/cmd/set/set_selector.go b/pkg/kubectl/cmd/set/set_selector.go index a9cad7f5e59..8209162232d 100644 --- a/pkg/kubectl/cmd/set/set_selector.go +++ b/pkg/kubectl/cmd/set/set_selector.go @@ -54,7 +54,6 @@ type SelectorOptions struct { builder *resource.Builder mapper meta.RESTMapper - encoder runtime.Encoder } var ( @@ -118,7 +117,6 @@ func (o *SelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.changeCause = f.Command(cmd, false) mapper, _ := f.Object() o.mapper = mapper - o.encoder = f.JSONEncoder() o.resources, o.selector, err = getResourcesAndSelector(args) if err != nil { @@ -178,13 +176,13 @@ 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) { + CalculatePatch(patch, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) { versioned := info.AsVersioned() patch.Info.Object = versioned selectErr := updateSelectorForObject(info.Object, *o.selector) if selectErr == nil { - return runtime.Encode(o.encoder, info.Object) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object) } return nil, selectErr }) diff --git a/pkg/kubectl/cmd/set/set_selector_test.go b/pkg/kubectl/cmd/set/set_selector_test.go index f0ab2156891..91c2cd381bd 100644 --- a/pkg/kubectl/cmd/set/set_selector_test.go +++ b/pkg/kubectl/cmd/set/set_selector_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" ) @@ -315,7 +316,8 @@ func TestGetResourcesAndSelector(t *testing.T) { } func TestSelectorTest(t *testing.T) { - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/set/set_serviceaccount.go b/pkg/kubectl/cmd/set/set_serviceaccount.go index a68a126cce4..1bcc1cfb5a5 100644 --- a/pkg/kubectl/cmd/set/set_serviceaccount.go +++ b/pkg/kubectl/cmd/set/set_serviceaccount.go @@ -55,7 +55,6 @@ var ( // serviceAccountConfig encapsulates the data required to perform the operation. type serviceAccountConfig struct { fileNameOptions resource.FilenameOptions - encoder runtime.Encoder out io.Writer err io.Writer dryRun bool @@ -104,7 +103,6 @@ func NewCmdServiceAccount(f cmdutil.Factory, out, err io.Writer) *cobra.Command // Complete configures serviceAccountConfig from command line args. func (saConfig *serviceAccountConfig) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { - saConfig.encoder = f.JSONEncoder() saConfig.shortOutput = cmdutil.GetFlagString(cmd, "output") == "name" saConfig.record = cmdutil.GetRecordFlag(cmd) saConfig.changeCause = f.Command(cmd, false) @@ -151,9 +149,9 @@ func (saConfig *serviceAccountConfig) Run() error { podSpec.ServiceAccountName = saConfig.serviceAccountName return nil }) - return runtime.Encode(saConfig.encoder, info.Object) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.Object) } - patches := CalculatePatches(saConfig.infos, saConfig.encoder, patchFn) + patches := CalculatePatches(saConfig.infos, cmdutil.InternalVersionJSONEncoder(), patchFn) for _, patch := range patches { info := patch.Info if patch.Err != nil { diff --git a/pkg/kubectl/cmd/set/set_serviceaccount_test.go b/pkg/kubectl/cmd/set/set_serviceaccount_test.go index 5b52fce16ec..f6b5451ef07 100644 --- a/pkg/kubectl/cmd/set/set_serviceaccount_test.go +++ b/pkg/kubectl/cmd/set/set_serviceaccount_test.go @@ -37,6 +37,7 @@ import ( "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/api/testapi" "k8s.io/kubernetes/pkg/kubectl/categories" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" @@ -67,7 +68,7 @@ func TestSetServiceAccountLocal(t *testing.T) { for i, input := range inputs { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -97,7 +98,8 @@ func TestSetServiceAccountLocal(t *testing.T) { func TestSetServiceAccountMultiLocal(t *testing.T) { testapi.Default = testapi.Groups[""] - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: ""}, NegotiatedSerializer: ns, @@ -311,8 +313,9 @@ func TestSetServiceAccountRemote(t *testing.T) { for _, input := range inputs { groupVersion := schema.GroupVersion{Group: input.apiGroup, Version: input.apiVersion} testapi.Default = testapi.Groups[input.testAPIGroup] - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() codec := scheme.Codecs.CodecForVersions(scheme.Codecs.LegacyCodec(groupVersion), scheme.Codecs.UniversalDecoder(groupVersion), groupVersion, groupVersion) + ns := legacyscheme.Codecs tf.Namespace = "test" tf.CategoryExpander = categories.LegacyCategoryExpander tf.Client = &fake.RESTClient{ @@ -364,7 +367,7 @@ func TestServiceAccountValidation(t *testing.T) { {args: []string{serviceAccount}, errorString: resourceMissingErrString}, } for _, input := range inputs { - f, tf, _, _ := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() tf.Client = &fake.RESTClient{ GroupVersion: schema.GroupVersion{Version: "v1"}, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/set/set_subject.go b/pkg/kubectl/cmd/set/set_subject.go index f2424e79a91..350db8ef0cc 100644 --- a/pkg/kubectl/cmd/set/set_subject.go +++ b/pkg/kubectl/cmd/set/set_subject.go @@ -57,7 +57,6 @@ type SubjectOptions struct { resource.FilenameOptions Infos []*resource.Info - Encoder runtime.Encoder Out io.Writer Err io.Writer Selector string @@ -108,7 +107,6 @@ func NewCmdSubject(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Co } func (o *SubjectOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []string) error { - o.Encoder = f.JSONEncoder() o.Output = cmdutil.GetFlagString(cmd, "output") o.DryRun = cmdutil.GetDryRunFlag(cmd) o.PrintObject = func(obj runtime.Object, out io.Writer) error { @@ -179,7 +177,7 @@ func (o *SubjectOptions) Validate() error { func (o *SubjectOptions) Run(f cmdutil.Factory, fn updateSubjects) error { var err error - patches := CalculatePatches(o.Infos, o.Encoder, func(info *resource.Info) ([]byte, error) { + patches := CalculatePatches(o.Infos, cmdutil.InternalVersionJSONEncoder(), func(info *resource.Info) ([]byte, error) { subjects := []rbac.Subject{} for _, user := range sets.NewString(o.Users...).List() { subject := rbac.Subject{ @@ -218,7 +216,7 @@ func (o *SubjectOptions) Run(f cmdutil.Factory, fn updateSubjects) error { transformed, err := updateSubjectForObject(info.Object, subjects, fn) if transformed && err == nil { // TODO: switch UpdatePodSpecForObject to work on v1.PodSpec - return runtime.Encode(o.Encoder, info.AsVersioned()) + return runtime.Encode(cmdutil.InternalVersionJSONEncoder(), info.AsVersioned()) } return nil, err }) diff --git a/pkg/kubectl/cmd/set/set_subject_test.go b/pkg/kubectl/cmd/set/set_subject_test.go index a303e75c2d0..66a4ef72064 100644 --- a/pkg/kubectl/cmd/set/set_subject_test.go +++ b/pkg/kubectl/cmd/set/set_subject_test.go @@ -28,7 +28,7 @@ import ( ) func TestValidate(t *testing.T) { - _, tf, _, _ := cmdtesting.NewAPIFactory() + _, tf := cmdtesting.NewAPIFactory() tf.Namespace = "test" tests := map[string]struct { diff --git a/pkg/kubectl/cmd/taint_test.go b/pkg/kubectl/cmd/taint_test.go index 172be9d309f..bc3079b9b28 100644 --- a/pkg/kubectl/cmd/taint_test.go +++ b/pkg/kubectl/cmd/taint_test.go @@ -29,8 +29,10 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/client-go/rest/fake" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func generateNodeAndTaintedNode(oldTaints []v1.Taint, newTaints []v1.Taint) (*v1.Node, *v1.Node) { @@ -237,7 +239,9 @@ func TestTaint(t *testing.T) { oldNode, expectNewNode := generateNodeAndTaintedNode(test.oldTaints, test.newTaints) new_node := &v1.Node{} tainted := false - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, diff --git a/pkg/kubectl/cmd/testing/BUILD b/pkg/kubectl/cmd/testing/BUILD index ef13e0525f9..1734ca2024a 100644 --- a/pkg/kubectl/cmd/testing/BUILD +++ b/pkg/kubectl/cmd/testing/BUILD @@ -15,7 +15,6 @@ go_library( ], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/kubectl:go_default_library", @@ -25,6 +24,7 @@ go_library( "//pkg/kubectl/cmd/util/openapi/testing:go_default_library", "//pkg/kubectl/plugins:go_default_library", "//pkg/kubectl/resource:go_default_library", + "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/validation:go_default_library", "//pkg/printers:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/pkg/kubectl/cmd/testing/fake.go b/pkg/kubectl/cmd/testing/fake.go index 31965d885a4..81df7784522 100644 --- a/pkg/kubectl/cmd/testing/fake.go +++ b/pkg/kubectl/cmd/testing/fake.go @@ -38,7 +38,6 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/kubectl" @@ -48,6 +47,7 @@ import ( openapitesting "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/testing" "k8s.io/kubernetes/pkg/kubectl/plugins" "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/validation" "k8s.io/kubernetes/pkg/printers" metricsclientset "k8s.io/metrics/pkg/client/clientset_generated/clientset" @@ -183,7 +183,7 @@ var InternalGV = schema.GroupVersion{Group: "apitest", Version: runtime.APIVersi var UnlikelyGV = schema.GroupVersion{Group: "apitest", Version: "unlikelyversion"} var ValidVersionGV = schema.GroupVersion{Group: "apitest", Version: ValidVersion} -func newExternalScheme() (*runtime.Scheme, meta.RESTMapper, runtime.Codec) { +func NewExternalScheme() (*runtime.Scheme, meta.RESTMapper, runtime.Codec) { scheme := runtime.NewScheme() mapper, codec := AddToScheme(scheme) return scheme, mapper, codec @@ -236,8 +236,6 @@ func (d *fakeCachedDiscoveryClient) ServerResources() ([]*metav1.APIResourceList } type TestFactory struct { - Mapper meta.RESTMapper - Typer runtime.ObjectTyper Client kubectl.RESTClient UnstructuredClient kubectl.RESTClient Describer printers.Describer @@ -248,7 +246,6 @@ type TestFactory struct { Command string TmpDir string CategoryExpander categories.CategoryExpander - SkipDiscovery bool MetricsClientSet metricsclientset.Interface ClientForMappingFunc func(mapping *meta.RESTMapping) (resource.RESTClient, error) @@ -257,22 +254,16 @@ type TestFactory struct { } type FakeFactory struct { - tf *TestFactory - Codec runtime.Codec + tf *TestFactory } -func NewTestFactory() (cmdutil.Factory, *TestFactory, runtime.Codec, runtime.NegotiatedSerializer) { - scheme, mapper, codec := newExternalScheme() +func NewTestFactory() (cmdutil.Factory, *TestFactory) { t := &TestFactory{ Validator: validation.NullSchema{}, - Mapper: mapper, - Typer: scheme, } - negotiatedSerializer := serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec}) return &FakeFactory{ - tf: t, - Codec: codec, - }, t, codec, negotiatedSerializer + tf: t, + }, t } func (f *FakeFactory) DiscoveryClient() (discovery.CachedDiscoveryInterface, error) { @@ -288,9 +279,6 @@ func (f *FakeFactory) FlagSet() *pflag.FlagSet { } func (f *FakeFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) { - if f.tf.SkipDiscovery { - return legacyscheme.Registry.RESTMapper(), f.tf.Typer - } groupResources := testDynamicResources() mapper := discovery.NewRESTMapper(groupResources, meta.InterfacesForUnstructuredConversion(legacyscheme.Registry.InterfacesFor)) typer := discovery.NewUnstructuredObjectTyper(groupResources, legacyscheme.Scheme) @@ -304,14 +292,6 @@ func (f *FakeFactory) CategoryExpander() categories.CategoryExpander { return categories.LegacyCategoryExpander } -func (f *FakeFactory) Decoder(bool) runtime.Decoder { - return f.Codec -} - -func (f *FakeFactory) JSONEncoder() runtime.Encoder { - return f.Codec -} - func (f *FakeFactory) RESTClient() (*restclient.RESTClient, error) { return nil, nil } @@ -481,7 +461,7 @@ func (f *FakeFactory) NewBuilder() *resource.Builder { RESTMapper: mapper, ObjectTyper: typer, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), - Decoder: f.Decoder(true), + Decoder: cmdutil.InternalVersionDecoder(), }, &resource.Mapper{ RESTMapper: mapper, @@ -513,56 +493,12 @@ func (f *FakeFactory) PluginRunner() plugins.PluginRunner { return &plugins.ExecPluginRunner{} } -type fakeMixedFactory struct { - cmdutil.Factory - tf *TestFactory - apiClient resource.RESTClient -} - -func (f *fakeMixedFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) { - var multiRESTMapper meta.MultiRESTMapper - multiRESTMapper = append(multiRESTMapper, f.tf.Mapper) - multiRESTMapper = append(multiRESTMapper, testapi.Default.RESTMapper()) - priorityRESTMapper := meta.PriorityRESTMapper{ - Delegate: multiRESTMapper, - ResourcePriority: []schema.GroupVersionResource{ - {Group: meta.AnyGroup, Version: "v1", Resource: meta.AnyResource}, - }, - KindPriority: []schema.GroupVersionKind{ - {Group: meta.AnyGroup, Version: "v1", Kind: meta.AnyKind}, - }, - } - return priorityRESTMapper, runtime.MultiObjectTyper{f.tf.Typer, legacyscheme.Scheme} -} - -func (f *fakeMixedFactory) ClientForMapping(m *meta.RESTMapping) (resource.RESTClient, error) { - if m.ObjectConvertor == legacyscheme.Scheme { - return f.apiClient, f.tf.Err - } - if f.tf.ClientForMappingFunc != nil { - return f.tf.ClientForMappingFunc(m) - } - return f.tf.Client, f.tf.Err -} - -func NewMixedFactory(apiClient resource.RESTClient) (cmdutil.Factory, *TestFactory, runtime.Codec) { - f, t, c, _ := NewAPIFactory() - return &fakeMixedFactory{ - Factory: f, - tf: t, - apiClient: apiClient, - }, t, c -} - type fakeAPIFactory struct { cmdutil.Factory tf *TestFactory } func (f *fakeAPIFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) { - if f.tf.SkipDiscovery { - return testapi.Default.RESTMapper(), legacyscheme.Scheme - } groupResources := testDynamicResources() mapper := discovery.NewRESTMapper( groupResources, @@ -571,7 +507,7 @@ func (f *fakeAPIFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) { // provide typed objects for these two versions case ValidVersionGV, UnlikelyGV: return &meta.VersionInterfaces{ - ObjectConvertor: f.tf.Typer.(*runtime.Scheme), + ObjectConvertor: scheme.Scheme, MetadataAccessor: meta.NewAccessor(), }, nil // otherwise fall back to the legacy scheme @@ -596,14 +532,6 @@ func (f *fakeAPIFactory) Object() (meta.RESTMapper, runtime.ObjectTyper) { return expander, typer } -func (f *fakeAPIFactory) Decoder(bool) runtime.Decoder { - return testapi.Default.Codec() -} - -func (f *fakeAPIFactory) JSONEncoder() runtime.Encoder { - return testapi.Default.Codec() -} - func (f *fakeAPIFactory) KubernetesClientSet() (*kubernetes.Clientset, error) { fakeClient := f.tf.Client.(*fake.RESTClient) clientset := kubernetes.NewForConfigOrDie(f.tf.ClientConfig) @@ -763,7 +691,7 @@ func (f *fakeAPIFactory) NewBuilder() *resource.Builder { RESTMapper: mapper, ObjectTyper: typer, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), - Decoder: f.Decoder(true), + Decoder: cmdutil.InternalVersionDecoder(), }, &resource.Mapper{ RESTMapper: mapper, @@ -786,7 +714,7 @@ func (f *fakeAPIFactory) OpenAPISchema() (openapi.Resources, error) { return openapitesting.EmptyResources{}, nil } -func NewAPIFactory() (cmdutil.Factory, *TestFactory, runtime.Codec, runtime.NegotiatedSerializer) { +func NewAPIFactory() (cmdutil.Factory, *TestFactory) { t := &TestFactory{ Validator: validation.NullSchema{}, } @@ -794,18 +722,7 @@ func NewAPIFactory() (cmdutil.Factory, *TestFactory, runtime.Codec, runtime.Nego return &fakeAPIFactory{ Factory: rf, tf: t, - }, t, testapi.Default.Codec(), testapi.Default.NegotiatedSerializer() -} - -func (f *TestFactory) WithCustomScheme() *TestFactory { - scheme, _, _ := newExternalScheme() - f.Typer = scheme - return f -} - -func (f *TestFactory) WithLegacyScheme() *TestFactory { - f.Typer = legacyscheme.Scheme - return f + }, t } func testDynamicResources() []*discovery.APIGroupResources { diff --git a/pkg/kubectl/cmd/top_node_test.go b/pkg/kubectl/cmd/top_node_test.go index e40063b0002..a0d4f55b596 100644 --- a/pkg/kubectl/cmd/top_node_test.go +++ b/pkg/kubectl/cmd/top_node_test.go @@ -30,7 +30,9 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest/fake" core "k8s.io/client-go/testing" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" metricsv1alpha1api "k8s.io/metrics/pkg/apis/metrics/v1alpha1" metricsv1beta1api "k8s.io/metrics/pkg/apis/metrics/v1beta1" metricsfake "k8s.io/metrics/pkg/client/clientset_generated/clientset/fake" @@ -47,7 +49,10 @@ func TestTopNodeAllMetrics(t *testing.T) { expectedMetricsPath := fmt.Sprintf("%s/%s/nodes", baseMetricsAddress, metricsApiVersion) expectedNodePath := fmt.Sprintf("/%s/%s/nodes", apiPrefix, apiVersion) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -95,7 +100,10 @@ func TestTopNodeAllMetricsCustomDefaults(t *testing.T) { expectedMetricsPath := fmt.Sprintf("%s/%s/nodes", customBaseMetricsAddress, metricsApiVersion) expectedNodePath := fmt.Sprintf("/%s/%s/nodes", apiPrefix, apiVersion) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -153,7 +161,10 @@ func TestTopNodeWithNameMetrics(t *testing.T) { expectedPath := fmt.Sprintf("%s/%s/nodes/%s", baseMetricsAddress, metricsApiVersion, expectedMetrics.Name) expectedNodePath := fmt.Sprintf("/%s/%s/nodes/%s", apiPrefix, apiVersion, expectedMetrics.Name) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -215,7 +226,10 @@ func TestTopNodeWithLabelSelectorMetrics(t *testing.T) { expectedQuery := fmt.Sprintf("labelSelector=%s", url.QueryEscape(label)) expectedNodePath := fmt.Sprintf("/%s/%s/nodes", apiPrefix, apiVersion) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -265,7 +279,10 @@ func TestTopNodeAllMetricsFromMetricsServer(t *testing.T) { expectedMetrics, nodes := testNodeV1beta1MetricsData() expectedNodePath := fmt.Sprintf("/%s/%s/nodes", apiPrefix, apiVersion) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -314,7 +331,10 @@ func TestTopNodeWithNameMetricsFromMetricsServer(t *testing.T) { } expectedNodePath := fmt.Sprintf("/%s/%s/nodes/%s", apiPrefix, apiVersion, expectedMetrics.Name) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -373,7 +393,10 @@ func TestTopNodeWithLabelSelectorMetricsFromMetricsServer(t *testing.T) { label := "key=value" expectedNodePath := fmt.Sprintf("/%s/%s/nodes", apiPrefix, apiVersion) - f, tf, codec, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + codec := legacyscheme.Codecs.LegacyCodec(scheme.Versions...) + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/top_pod_test.go b/pkg/kubectl/cmd/top_pod_test.go index 47162b35e67..0c15354338e 100644 --- a/pkg/kubectl/cmd/top_pod_test.go +++ b/pkg/kubectl/cmd/top_pod_test.go @@ -35,6 +35,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" core "k8s.io/client-go/testing" + "k8s.io/kubernetes/pkg/api/legacyscheme" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" metricsv1alpha1api "k8s.io/metrics/pkg/apis/metrics/v1alpha1" metricsv1beta1api "k8s.io/metrics/pkg/apis/metrics/v1beta1" @@ -161,7 +162,9 @@ func TestTopPod(t *testing.T) { } } - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -301,7 +304,9 @@ func TestTopPodWithMetricsServer(t *testing.T) { }) } - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { @@ -479,7 +484,9 @@ func TestTopPodCustomDefaults(t *testing.T) { } } - f, tf, _, ns := cmdtesting.NewAPIFactory() + f, tf := cmdtesting.NewAPIFactory() + ns := legacyscheme.Codecs + tf.Client = &fake.RESTClient{ NegotiatedSerializer: ns, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/top_test.go b/pkg/kubectl/cmd/top_test.go index da57d99e46b..adbc1d619a9 100644 --- a/pkg/kubectl/cmd/top_test.go +++ b/pkg/kubectl/cmd/top_test.go @@ -43,7 +43,7 @@ const ( func TestTopSubcommandsExist(t *testing.T) { initTestErrorHandler(t) - f, _, _, _ := cmdtesting.NewAPIFactory() + f, _ := cmdtesting.NewAPIFactory() buf := bytes.NewBuffer([]byte{}) cmd := NewCmdTop(f, buf, buf) diff --git a/pkg/kubectl/cmd/util/editor/editoptions.go b/pkg/kubectl/cmd/util/editor/editoptions.go index 0b4e4a3fb2e..b7ae830d228 100644 --- a/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/pkg/kubectl/cmd/util/editor/editoptions.go @@ -62,7 +62,6 @@ type EditOptions struct { ResourceMapper *resource.Mapper OriginalResult *resource.Result - Encoder runtime.Encoder EditMode EditMode @@ -137,7 +136,6 @@ func (o *EditOptions) Complete(f cmdutil.Factory, out, errOut io.Writer, args [] } o.CmdNamespace = cmdNamespace - o.Encoder = f.JSONEncoder() o.f = f // Set up writer @@ -394,12 +392,12 @@ func (o *EditOptions) visitToApplyEditPatch(originalInfos []*resource.Info, patc return fmt.Errorf("no original object found for %#v", info.Object) } - originalJS, err := encodeToJson(o.Encoder, originalInfo.Object) + originalJS, err := encodeToJson(cmdutil.InternalVersionJSONEncoder(), originalInfo.Object) if err != nil { return err } - editedJS, err := encodeToJson(o.Encoder, info.Object) + editedJS, err := encodeToJson(cmdutil.InternalVersionJSONEncoder(), info.Object) if err != nil { return err } @@ -420,7 +418,7 @@ func (o *EditOptions) visitToApplyEditPatch(originalInfos []*resource.Info, patc } func (o *EditOptions) annotationPatch(update *resource.Info) error { - patch, _, patchType, err := GetApplyPatch(update.Object, o.Encoder) + patch, _, patchType, err := GetApplyPatch(update.Object, cmdutil.InternalVersionJSONEncoder()) if err != nil { return err } @@ -519,12 +517,12 @@ func (o *EditOptions) visitToPatch(originalInfos []*resource.Info, patchVisitor return fmt.Errorf("no original object found for %#v", info.Object) } - originalJS, err := encodeToJson(o.Encoder, originalInfo.Object) + originalJS, err := encodeToJson(cmdutil.InternalVersionJSONEncoder(), originalInfo.Object) if err != nil { return err } - editedJS, err := encodeToJson(o.Encoder, info.Object) + editedJS, err := encodeToJson(cmdutil.InternalVersionJSONEncoder(), info.Object) if err != nil { return err } @@ -607,7 +605,7 @@ func (o *EditOptions) visitAnnotation(annotationVisitor resource.Visitor) error err := annotationVisitor.Visit(func(info *resource.Info, incomingErr error) error { // put configuration annotation in "updates" if o.ApplyAnnotation { - if err := kubectl.CreateOrUpdateAnnotation(true, info, o.Encoder); err != nil { + if err := kubectl.CreateOrUpdateAnnotation(true, info, cmdutil.InternalVersionJSONEncoder()); err != nil { return err } } diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index 6275272afa5..818ac4be402 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -112,13 +112,6 @@ type ClientAccessFactory interface { // TODO remove. This should be rolled into `ClientConfig` ClientConfigForVersion(requiredVersion *schema.GroupVersion) (*restclient.Config, error) - // Returns interfaces for decoding objects - if toInternal is set, decoded objects will be converted - // into their internal form (if possible). Eventually the internal form will be removed as an option, - // and only versioned objects will be returned. - Decoder(toInternal bool) runtime.Decoder - // Returns an encoder capable of encoding a provided object into JSON in the default desired version. - JSONEncoder() runtime.Encoder - // UpdatePodSpecForObject will call the provided function on the pod spec this object supports, // return false if no pod spec is supported, or return an error. UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error) diff --git a/pkg/kubectl/cmd/util/factory_builder.go b/pkg/kubectl/cmd/util/factory_builder.go index a04caeb2d89..98407d17945 100644 --- a/pkg/kubectl/cmd/util/factory_builder.go +++ b/pkg/kubectl/cmd/util/factory_builder.go @@ -54,7 +54,7 @@ func (f *ring2Factory) NewBuilder() *resource.Builder { RESTMapper: mapper, ObjectTyper: typer, ClientMapper: clientMapperFunc, - Decoder: f.clientAccessFactory.Decoder(true), + Decoder: InternalVersionDecoder(), }, &resource.Mapper{ RESTMapper: mapper, diff --git a/pkg/kubectl/cmd/util/factory_client_access.go b/pkg/kubectl/cmd/util/factory_client_access.go index b65396cb65a..72c3ac35168 100644 --- a/pkg/kubectl/cmd/util/factory_client_access.go +++ b/pkg/kubectl/cmd/util/factory_client_access.go @@ -231,20 +231,6 @@ func (f *ring0Factory) RESTClient() (*restclient.RESTClient, error) { return restclient.RESTClientFor(clientConfig) } -func (f *ring0Factory) Decoder(toInternal bool) runtime.Decoder { - var decoder runtime.Decoder - if toInternal { - decoder = legacyscheme.Codecs.UniversalDecoder() - } else { - decoder = legacyscheme.Codecs.UniversalDeserializer() - } - return decoder -} - -func (f *ring0Factory) JSONEncoder() runtime.Encoder { - return legacyscheme.Codecs.LegacyCodec(legacyscheme.Registry.EnabledVersions()...) -} - func (f *ring0Factory) UpdatePodSpecForObject(obj runtime.Object, fn func(*v1.PodSpec) error) (bool, error) { // TODO: replace with a swagger schema based approach (identify pod template via schema introspection) switch t := obj.(type) { @@ -451,7 +437,7 @@ func (f *ring0Factory) Pauser(info *resource.Info) ([]byte, error) { return nil, errors.New("is already paused") } obj.Spec.Paused = true - return runtime.Encode(f.JSONEncoder(), info.Object) + return runtime.Encode(InternalVersionJSONEncoder(), info.Object) default: return nil, fmt.Errorf("pausing is not supported") } @@ -468,7 +454,7 @@ func (f *ring0Factory) Resumer(info *resource.Info) ([]byte, error) { return nil, errors.New("is not paused") } obj.Spec.Paused = false - return runtime.Encode(f.JSONEncoder(), info.Object) + return runtime.Encode(InternalVersionJSONEncoder(), info.Object) default: return nil, fmt.Errorf("resuming is not supported") } @@ -714,3 +700,12 @@ func computeDiscoverCacheDir(parentDir, host string) string { return filepath.Join(parentDir, safeHost) } + +// this method exists to help us find the points still relying on internal types. +func InternalVersionDecoder() runtime.Decoder { + return legacyscheme.Codecs.UniversalDecoder() +} + +func InternalVersionJSONEncoder() runtime.Encoder { + return legacyscheme.Codecs.LegacyCodec(legacyscheme.Registry.EnabledVersions()...) +} diff --git a/pkg/kubectl/explain/BUILD b/pkg/kubectl/explain/BUILD index a873680c52b..fa8aed92451 100644 --- a/pkg/kubectl/explain/BUILD +++ b/pkg/kubectl/explain/BUILD @@ -49,9 +49,8 @@ go_test( data = ["test-swagger.json"], embed = [":go_default_library"], deps = [ - "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util/openapi/testing:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//pkg/kubectl/scheme:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", ], ) diff --git a/pkg/kubectl/explain/explain_test.go b/pkg/kubectl/explain/explain_test.go index 29862fa6383..46317bfd3f7 100644 --- a/pkg/kubectl/explain/explain_test.go +++ b/pkg/kubectl/explain/explain_test.go @@ -20,8 +20,7 @@ import ( "reflect" "testing" - "k8s.io/apimachinery/pkg/api/meta" - cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" + "k8s.io/kubernetes/pkg/kubectl/scheme" ) func TestSplitAndParseResourceRequest(t *testing.T) { @@ -57,7 +56,7 @@ func TestSplitAndParseResourceRequest(t *testing.T) { }, } - mapper := getMapper() + mapper := scheme.Registry.RESTMapper(scheme.Versions...) for _, test := range tests { gotInResource, gotFieldsPath, err := SplitAndParseResourceRequest(test.inresource, mapper) if err != nil { @@ -73,9 +72,3 @@ func TestSplitAndParseResourceRequest(t *testing.T) { } } } - -func getMapper() meta.RESTMapper { - f, _, _, _ := cmdtesting.NewTestFactory() - mapper, _ := f.Object() - return mapper -} diff --git a/pkg/kubectl/scheme/scheme.go b/pkg/kubectl/scheme/scheme.go index c69c5465f4d..d2e7ca978cb 100644 --- a/pkg/kubectl/scheme/scheme.go +++ b/pkg/kubectl/scheme/scheme.go @@ -47,3 +47,8 @@ var ParameterCodec = runtime.NewParameterCodec(Scheme) // from the server for use in the client, but that gives conflicting lists of non-existent versions. This only needs to // live until we stop attempting to perform any conversion client-side and is only valid for items existent in our scheme. var Versions = []schema.GroupVersion{} + +// DefaultJSONEncoder returns a default encoder for our scheme +func DefaultJSONEncoder() runtime.Encoder { + return Codecs.LegacyCodec(Versions...) +}