diff --git a/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/typed/cr/v1/cr_client.go b/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/typed/cr/v1/cr_client.go index ef517d88252..a136ea7126b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/typed/cr/v1/cr_client.go +++ b/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/typed/cr/v1/cr_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := crv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/apiextensions_client.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/apiextensions_client.go index 6e62b44e9b8..cd766a2dcca 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/apiextensions_client.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1/apiextensions_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiextensionsv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/apiextensions_client.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/apiextensions_client.go index c7ba7a43def..e45f25d586b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/apiextensions_client.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1/apiextensions_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiextensionsv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/go.mod b/staging/src/k8s.io/client-go/go.mod index 0c3773cd656..315dbdec2c9 100644 --- a/staging/src/k8s.io/client-go/go.mod +++ b/staging/src/k8s.io/client-go/go.mod @@ -16,6 +16,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.0 github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/peterbourgon/diskv v2.0.1+incompatible github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 @@ -53,7 +54,6 @@ require ( github.com/moby/spdystream v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/onsi/ginkgo/v2 v2.19.0 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go index edf8d46b2f4..74d2967f664 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := admissionregistrationv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go index 9aea734bcf8..728390d3810 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/admissionregistration_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := admissionregistrationv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go index 72ace051d87..16c42b0ec6b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/admissionregistration_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := admissionregistrationv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go index 77f038c0c61..b76fadf91b0 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apiserverinternal/v1alpha1/apiserverinternal_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiserverinternalv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go index 75b97cb4ea2..cb0bf87badf 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go @@ -108,7 +108,7 @@ func setConfigDefaults(config *rest.Config) error { gv := appsv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go index e926889de70..72bde633bff 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/apps_client.go @@ -98,7 +98,7 @@ func setConfigDefaults(config *rest.Config) error { gv := appsv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go index d21799595c8..e13d12a7632 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta2/apps_client.go @@ -108,7 +108,7 @@ func setConfigDefaults(config *rest.Config) error { gv := appsv1beta2.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go index 813af819539..bd5df779838 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1/authentication_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := authenticationv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1alpha1/authentication_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1alpha1/authentication_client.go index 9d05fc772ed..82126585919 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1alpha1/authentication_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1alpha1/authentication_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := authenticationv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go index b5f28fa89fd..7b22e46e311 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/authentication_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := authenticationv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go index d80921a05e2..71fb89b383d 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1/authorization_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := authorizationv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go index bcbcc0650cf..f33619eb384 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/authorization_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := authorizationv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go index 709d7b4a899..6ceaaf82af5 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/autoscaling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := autoscalingv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2/autoscaling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2/autoscaling_client.go index 9cf1e3ea2e4..78a2609bf4b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2/autoscaling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2/autoscaling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := autoscalingv2.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go index bd3bb5426f1..1fcda17c81b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/autoscaling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := autoscalingv2beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go index 0177ea01b6c..62f5b743c72 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/autoscaling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := autoscalingv2beta2.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go index 72612686963..614d049f3bf 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/batch_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := batchv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go index 99d82e779c3..2da9e413500 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1beta1/batch_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := batchv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go index 9df149a9023..60337cd23fb 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1/certificates_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := certificatesv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go index 77ff1cfeb2f..36e08253af8 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := certificatesv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go index 915b83b500b..f040e7664e4 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := certificatesv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go index 33dfcdc912e..427cb7e9366 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1/coordination_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := coordinationv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1alpha1/coordination_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1alpha1/coordination_client.go index 9a29f505265..6be36e296ec 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1alpha1/coordination_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1alpha1/coordination_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := coordinationv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go index 7cdb4fdd007..1f1afba2406 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/coordination/v1beta1/coordination_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := coordinationv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go index 2b8a454db60..abf85cba641 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go @@ -163,7 +163,7 @@ func setConfigDefaults(config *rest.Config) error { gv := corev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/api" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1/discovery_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1/discovery_client.go index b26a01eb7c4..fbc685df829 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1/discovery_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1/discovery_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := discoveryv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go index a803f1ed049..908446c6d5b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/discovery/v1beta1/discovery_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := discoveryv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go index 91a85c949a9..959ff5f81ac 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := eventsv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go index f12d4e844f4..0bfc3cb6074 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1/events_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := eventsv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go index 40b4c0db4e3..88f2279bb01 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go @@ -108,7 +108,7 @@ func setConfigDefaults(config *rest.Config) error { gv := extensionsv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1/flowcontrol_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1/flowcontrol_client.go index 6571f03859f..3b19586e91b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1/flowcontrol_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1/flowcontrol_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := flowcontrolv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go index 16be5309c38..ac3f5ffe818 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta1/flowcontrol_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := flowcontrolv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2/flowcontrol_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2/flowcontrol_client.go index 889ff911cb1..7652d4f39ba 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2/flowcontrol_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta2/flowcontrol_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := flowcontrolv1beta2.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3/flowcontrol_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3/flowcontrol_client.go index 17da6ad2e9c..b32dc911c71 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3/flowcontrol_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3/flowcontrol_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := flowcontrolv1beta3.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go index cf1c6d4dd7b..692b52f025a 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networking_client.go @@ -98,7 +98,7 @@ func setConfigDefaults(config *rest.Config) error { gv := networkingv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1alpha1/networking_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1alpha1/networking_client.go index 92021147353..9e1b3064d89 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1alpha1/networking_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1alpha1/networking_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := networkingv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go index 6a3f99dc724..cb4b0c601bc 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1beta1/networking_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := networkingv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go index 4f23b76d29f..3bde211713e 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1/node_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := nodev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go index 3951e4e1e14..e47ef354859 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1alpha1/node_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := nodev1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go index 6056199c733..c7864a4796c 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/node/v1beta1/node_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := nodev1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1/policy_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1/policy_client.go index 1b3d47f9031..8d84f460b06 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1/policy_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1/policy_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := policyv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go index f867e99fe3a..d8e78627e13 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/policy_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := policyv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go index d6b0b191f06..c586ee638b6 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1/rbac_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := rbacv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go index d1f422148c5..df46fc3aaad 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/rbac_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := rbacv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go index 6db359b4ded..5739bb289e0 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/rbac_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := rbacv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/resource/v1alpha3/resource_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/resource/v1alpha3/resource_client.go index 46e54f9c1b8..acc9b97c223 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/resource/v1alpha3/resource_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/resource/v1alpha3/resource_client.go @@ -103,7 +103,7 @@ func setConfigDefaults(config *rest.Config) error { gv := resourcev1alpha3.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go index f495445a8b1..bbb46a9def4 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1/scheduling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := schedulingv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go index f118c352486..056ab855ed9 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/scheduling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := schedulingv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go index 48bfefe162e..9e383398ea0 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/scheduling_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := schedulingv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go index 0084094ece9..70aaff169f4 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1/storage_client.go @@ -108,7 +108,7 @@ func setConfigDefaults(config *rest.Config) error { gv := storagev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go index 1099f42aea8..17b680d1991 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/storage_client.go @@ -98,7 +98,7 @@ func setConfigDefaults(config *rest.Config) error { gv := storagev1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go index a4beab40639..63b1d42a338 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/storage_client.go @@ -113,7 +113,7 @@ func setConfigDefaults(config *rest.Config) error { gv := storagev1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1/storagemigration_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1/storagemigration_client.go index 59e3c30d4e2..dcd5a4bf8ca 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1/storagemigration_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storagemigration/v1alpha1/storagemigration_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := storagemigrationv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/client-go/rest/client.go b/staging/src/k8s.io/client-go/rest/client.go index c864d1ec79c..b98d0276479 100644 --- a/staging/src/k8s.io/client-go/rest/client.go +++ b/staging/src/k8s.io/client-go/rest/client.go @@ -17,6 +17,8 @@ limitations under the License. package rest import ( + "fmt" + "mime" "net/http" "net/url" "os" @@ -24,9 +26,11 @@ import ( "strings" "time" + "github.com/munnerz/goautoneg" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" + clientfeatures "k8s.io/client-go/features" "k8s.io/client-go/util/flowcontrol" ) @@ -115,7 +119,7 @@ func NewRESTClient(baseURL *url.URL, versionedAPIPath string, config ClientConte return &RESTClient{ base: &base, versionedAPIPath: versionedAPIPath, - content: config, + content: scrubCBORContentConfigIfDisabled(config), createBackoffMgr: readExpBackoffConfig, rateLimiter: rateLimiter, @@ -123,6 +127,45 @@ func NewRESTClient(baseURL *url.URL, versionedAPIPath string, config ClientConte }, nil } +func scrubCBORContentConfigIfDisabled(content ClientContentConfig) ClientContentConfig { + if clientfeatures.TestOnlyFeatureGates.Enabled(clientfeatures.TestOnlyClientAllowsCBOR) { + return content + } + + if mediatype, _, err := mime.ParseMediaType(content.ContentType); err == nil && mediatype == "application/cbor" { + content.ContentType = "application/json" + } + + clauses := goautoneg.ParseAccept(content.AcceptContentTypes) + scrubbed := false + for i, clause := range clauses { + if clause.Type == "application" && clause.SubType == "cbor" { + scrubbed = true + clauses[i].SubType = "json" + } + } + if !scrubbed { + // No application/cbor in AcceptContentTypes, nothing more to do. + return content + } + + parts := make([]string, 0, len(clauses)) + for _, clause := range clauses { + // ParseAccept does not store the parameter "q" in Params. + params := clause.Params + if clause.Q < 1 { // omit q=1, it's the default + if params == nil { + params = make(map[string]string, 1) + } + params["q"] = strconv.FormatFloat(clause.Q, 'g', 3, 32) + } + parts = append(parts, mime.FormatMediaType(fmt.Sprintf("%s/%s", clause.Type, clause.SubType), params)) + } + content.AcceptContentTypes = strings.Join(parts, ",") + + return content +} + // GetRateLimiter returns rate limiter for a given client, or nil if it's called on a nil client func (c *RESTClient) GetRateLimiter() flowcontrol.RateLimiter { if c == nil { diff --git a/staging/src/k8s.io/client-go/rest/config.go b/staging/src/k8s.io/client-go/rest/config.go index 998a2f8b998..c58e9668b83 100644 --- a/staging/src/k8s.io/client-go/rest/config.go +++ b/staging/src/k8s.io/client-go/rest/config.go @@ -32,6 +32,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/runtime/serializer/cbor" + "k8s.io/client-go/features" "k8s.io/client-go/pkg/version" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/transport" @@ -672,3 +675,31 @@ func CopyConfig(config *Config) *Config { } return c } + +// CodecFactoryForGeneratedClient returns the provided CodecFactory if there are no enabled client +// feature gates affecting serialization. Otherwise, it constructs and returns a new CodecFactory +// from the provided Scheme. +// +// This is supported ONLY for use by clients generated with client-gen. The caller is responsible +// for ensuring that the CodecFactory argument was constructed using the Scheme argument. +func CodecFactoryForGeneratedClient(scheme *runtime.Scheme, codecs serializer.CodecFactory) serializer.CodecFactory { + if !features.TestOnlyFeatureGates.Enabled(features.TestOnlyClientAllowsCBOR) { + // NOTE: This assumes client-gen will not generate CBOR-enabled Codecs as long as + // the feature gate exists. + return codecs + } + + return serializer.NewCodecFactory(scheme, serializer.WithSerializer(func(creater runtime.ObjectCreater, typer runtime.ObjectTyper) runtime.SerializerInfo { + return runtime.SerializerInfo{ + MediaType: "application/cbor", + MediaTypeType: "application", + MediaTypeSubType: "cbor", + Serializer: cbor.NewSerializer(creater, typer), + StrictSerializer: cbor.NewSerializer(creater, typer, cbor.Strict(true)), + StreamSerializer: &runtime.StreamSerializerInfo{ + Framer: cbor.NewFramer(), + Serializer: cbor.NewSerializer(creater, typer, cbor.Transcode(false)), + }, + } + })) +} diff --git a/staging/src/k8s.io/client-go/rest/request.go b/staging/src/k8s.io/client-go/rest/request.go index 2f325ecd628..765b897d88f 100644 --- a/staging/src/k8s.io/client-go/rest/request.go +++ b/staging/src/k8s.io/client-go/rest/request.go @@ -160,6 +160,9 @@ func NewRequest(c *RESTClient) *Request { contentTypeNotSet := len(contentConfig.ContentType) == 0 if contentTypeNotSet { contentConfig.ContentType = "application/json" + if clientfeatures.TestOnlyFeatureGates.Enabled(clientfeatures.TestOnlyClientAllowsCBOR) && clientfeatures.TestOnlyFeatureGates.Enabled(clientfeatures.TestOnlyClientPrefersCBOR) { + contentConfig.ContentType = "application/cbor" + } } r := &Request{ diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go index e5915b67724..8196871753f 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_group.go @@ -83,25 +83,26 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer } schemePackage := path.Join(g.clientsetPackage, "scheme") m := map[string]interface{}{ - "version": g.version, - "groupName": groupName, - "GroupGoName": g.groupGoName, - "Version": namer.IC(g.version), - "types": g.types, - "apiPath": apiPath, - "httpClient": c.Universe.Type(types.Name{Package: "net/http", Name: "Client"}), - "schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}), - "runtimeAPIVersionInternal": c.Universe.Variable(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "APIVersionInternal"}), - "restConfig": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Config"}), - "restDefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}), - "restRESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), - "RESTHTTPClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "HTTPClientFor"}), - "restRESTClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientFor"}), - "restRESTClientForConfigAndClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientForConfigAndClient"}), - "SchemeGroupVersion": c.Universe.Variable(types.Name{Package: g.inputPackage, Name: "SchemeGroupVersion"}), - "SchemePrioritizedVersionsForGroup": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Scheme.PrioritizedVersionsForGroup"}), - "Codecs": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Codecs"}), - "CodecsWithoutConversion": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Codecs.WithoutConversion"}), + "version": g.version, + "groupName": groupName, + "GroupGoName": g.groupGoName, + "Version": namer.IC(g.version), + "types": g.types, + "apiPath": apiPath, + "httpClient": c.Universe.Type(types.Name{Package: "net/http", Name: "Client"}), + "schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}), + "runtimeAPIVersionInternal": c.Universe.Variable(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "APIVersionInternal"}), + "restConfig": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Config"}), + "restDefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "DefaultKubernetesUserAgent"}), + "restRESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), + "RESTHTTPClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "HTTPClientFor"}), + "restRESTClientFor": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientFor"}), + "restRESTClientForConfigAndClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "RESTClientForConfigAndClient"}), + "restCodecFactoryForGeneratedClient": c.Universe.Function(types.Name{Package: "k8s.io/client-go/rest", Name: "CodecFactoryForGeneratedClient"}), + "SchemeGroupVersion": c.Universe.Variable(types.Name{Package: g.inputPackage, Name: "SchemeGroupVersion"}), + "SchemePrioritizedVersionsForGroup": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Scheme.PrioritizedVersionsForGroup"}), + "Codecs": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Codecs"}), + "Scheme": c.Universe.Variable(types.Name{Package: schemePackage, Name: "Scheme"}), } sw.Do(groupInterfaceTemplate, m) sw.Do(groupClientTemplate, m) @@ -235,7 +236,7 @@ func setConfigDefaults(config *$.restConfig|raw$) error { gv := $.SchemePrioritizedVersionsForGroup|raw$("$.groupName$")[0] config.GroupVersion = &gv } - config.NegotiatedSerializer = $.Codecs|raw$ + config.NegotiatedSerializer = $.restCodecFactoryForGeneratedClient|raw$($.Scheme|raw$, $.Codecs|raw$) if config.QPS == 0 { config.QPS = 5 @@ -253,7 +254,7 @@ func setConfigDefaults(config *$.restConfig|raw$) error { gv := $.SchemeGroupVersion|raw$ config.GroupVersion = &gv config.APIPath = $.apiPath$ - config.NegotiatedSerializer = $.CodecsWithoutConversion|raw$() + config.NegotiatedSerializer = $.restCodecFactoryForGeneratedClient|raw$($.Scheme|raw$, $.Codecs|raw$).WithoutConversion() if config.UserAgent == "" { config.UserAgent = $.restDefaultKubernetesUserAgent|raw$() diff --git a/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/typed/example/v1/example_client.go b/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/typed/example/v1/example_client.go index c10c0a56b8c..6550cf4f4c8 100644 --- a/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/typed/example/v1/example_client.go +++ b/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/typed/example/v1/example_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := examplev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/typed/example/v1/example_client.go b/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/typed/example/v1/example_client.go index 91f81982264..66602c1c304 100644 --- a/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/typed/example/v1/example_client.go +++ b/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/typed/example/v1/example_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := examplev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/core/v1/core_client.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/core/v1/core_client.go index 32ff66818e2..67866b37206 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/core/v1/core_client.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/core/v1/core_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := corev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/api" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example/v1/example_client.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example/v1/example_client.go index 83bab2978b2..f33d678552f 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example/v1/example_client.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example/v1/example_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := examplev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example2/v1/example2_client.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example2/v1/example2_client.go index 50d3f57bced..22f3b8d3537 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example2/v1/example2_client.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example2/v1/example2_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := example2v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example3.io/v1/example3.io_client.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example3.io/v1/example3.io_client.go index 8d23b8771ef..41fdbe6e62d 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example3.io/v1/example3.io_client.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/typed/example3.io/v1/example3.io_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := example3iov1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/conflicting/v1/conflicting_client.go b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/conflicting/v1/conflicting_client.go index 208d77637ec..b9b9a1158ad 100644 --- a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/conflicting/v1/conflicting_client.go +++ b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/conflicting/v1/conflicting_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := conflictingv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example/v1/example_client.go b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example/v1/example_client.go index 98c052a0192..3914ce83bc6 100644 --- a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example/v1/example_client.go +++ b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example/v1/example_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := examplev1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example2/v1/example2_client.go b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example2/v1/example2_client.go index 8902a886f4d..86143601898 100644 --- a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example2/v1/example2_client.go +++ b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/example2/v1/example2_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := example2v1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/extensions/v1/extensions_client.go b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/extensions/v1/extensions_client.go index de26a13b1b8..94318cc69ae 100644 --- a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/extensions/v1/extensions_client.go +++ b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/typed/extensions/v1/extensions_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := extensionsv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/code-generator/examples/single/clientset/versioned/typed/api/v1/api_client.go b/staging/src/k8s.io/code-generator/examples/single/clientset/versioned/typed/api/v1/api_client.go index c1af1175e9b..ac334f60f99 100644 --- a/staging/src/k8s.io/code-generator/examples/single/clientset/versioned/typed/api/v1/api_client.go +++ b/staging/src/k8s.io/code-generator/examples/single/clientset/versioned/typed/api/v1/api_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1/apiregistration_client.go b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1/apiregistration_client.go index 8ca76bf9859..b2f256175d9 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1/apiregistration_client.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1/apiregistration_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiregistrationv1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1beta1/apiregistration_client.go b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1beta1/apiregistration_client.go index a4b9a63f781..63863d02dde 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1beta1/apiregistration_client.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1beta1/apiregistration_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := apiregistrationv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1/metrics_client.go b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1/metrics_client.go index f90040c55d3..faa543a0818 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1/metrics_client.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1alpha1/metrics_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := metricsv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1/metrics_client.go b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1/metrics_client.go index 0622d480ced..53dfc33fcde 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1/metrics_client.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1/metrics_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := metricsv1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1alpha1/wardle_client.go b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1alpha1/wardle_client.go index a6a4e08230f..551e322b4be 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1alpha1/wardle_client.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1alpha1/wardle_client.go @@ -93,7 +93,7 @@ func setConfigDefaults(config *rest.Config) error { gv := wardlev1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1beta1/wardle_client.go b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1beta1/wardle_client.go index fcd748ef282..961afd22685 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1beta1/wardle_client.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1beta1/wardle_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := wardlev1beta1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/samplecontroller_client.go b/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/samplecontroller_client.go index 68b977746b9..e0c46ffd930 100644 --- a/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/samplecontroller_client.go +++ b/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/samplecontroller_client.go @@ -88,7 +88,7 @@ func setConfigDefaults(config *rest.Config) error { gv := samplecontrollerv1alpha1.SchemeGroupVersion config.GroupVersion = &gv config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion() if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/test/integration/client/client_test.go b/test/integration/client/client_test.go index 27786c49a81..04e47ddd74b 100644 --- a/test/integration/client/client_test.go +++ b/test/integration/client/client_test.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "log" + "net/http" "reflect" rt "runtime" "strings" @@ -28,9 +29,12 @@ import ( "time" "github.com/google/go-cmp/cmp" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" eventsv1 "k8s.io/api/events/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionsv1client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -45,14 +49,22 @@ import ( appsv1ac "k8s.io/client-go/applyconfigurations/apps/v1" corev1ac "k8s.io/client-go/applyconfigurations/core/v1" metav1ac "k8s.io/client-go/applyconfigurations/meta/v1" + "k8s.io/client-go/discovery" + "k8s.io/client-go/gentype" clientset "k8s.io/client-go/kubernetes" - "k8s.io/utils/pointer" - + clientscheme "k8s.io/client-go/kubernetes/scheme" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/rest" + "k8s.io/client-go/util/retry" utilversion "k8s.io/component-base/version" kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/test/integration/framework" imageutils "k8s.io/kubernetes/test/utils/image" + "k8s.io/kubernetes/test/utils/ktesting" + wardlev1alpha1 "k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1" + wardlev1alpha1client "k8s.io/sample-apiserver/pkg/generated/clientset/versioned/typed/wardle/v1alpha1" + "k8s.io/utils/ptr" ) func TestClient(t *testing.T) { @@ -147,7 +159,7 @@ func TestAtomicPut(t *testing.T) { }, }, Spec: v1.ReplicationControllerSpec{ - Replicas: pointer.Int32(0), + Replicas: ptr.To(int32(0)), Selector: map[string]string{ "foo": "bar", }, @@ -1347,3 +1359,494 @@ func TestExtractModifyApply_ForceOwnership(t *testing.T) { t.Errorf("createMgrExtracted apply configuration did not match expected, got:\n%s\n", cmp.Diff(expectedCreateExtracted, createMgrExtracted)) } } + +func TestGeneratedClientCBOREnablement(t *testing.T) { + // Generated clients for built-in types force Protobuf by default. They are tested here to + // ensure that the CBOR client feature gates do not interfere with this. + DoRequestWithProtobufPreferredGeneratedClient := func(t *testing.T, config *rest.Config) error { + clientset, err := clientset.NewForConfig(config) + if err != nil { + t.Fatal(err) + } + + _, err = clientset.CoreV1().Namespaces().Create( + context.TODO(), + &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-generated-client-cbor-enablement", + }, + }, + metav1.CreateOptions{DryRun: []string{metav1.DryRunAll}}, + ) + return err + } + + DoRequestWithGeneratedClient := func(t *testing.T, config *rest.Config) error { + // This is using a generated client from sample-apiserver because it is generated + // without --prefer-protobuf. For convenience, the test serves the API as a CRD with + // a permissive schema instead of running a real aggregated sample-apiserver. + wardleClient, err := wardlev1alpha1client.NewForConfig(config) + if err != nil { + t.Fatal(err) + } + + _, err = wardleClient.Fischers().Create( + context.TODO(), + &wardlev1alpha1.Fischer{ + ObjectMeta: metav1.ObjectMeta{Name: "test-generated-client-cbor-enablement"}, + }, + metav1.CreateOptions{DryRun: []string{metav1.DryRunAll}}, + ) + return err + } + + type testCase struct { + name string + served bool + allowed bool + preferred bool + configuredContentType string + configuredAccept string + wantRequestContentType string + wantRequestAccept string + wantResponseContentType string + wantResponseStatus int + wantStatusError bool + doRequest func(t *testing.T, config *rest.Config) error + } + + testCases := []testCase{ + { + name: "cbor allowed and preferred client forces protobuf", + served: true, + allowed: true, + preferred: true, + wantRequestContentType: "application/vnd.kubernetes.protobuf", + wantRequestAccept: "application/vnd.kubernetes.protobuf,application/json", + wantResponseContentType: "application/vnd.kubernetes.protobuf", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithProtobufPreferredGeneratedClient, + }, + { + name: "cbor allowed and not preferred client forces protobuf", + served: true, + allowed: true, + preferred: false, + wantRequestContentType: "application/vnd.kubernetes.protobuf", + wantRequestAccept: "application/vnd.kubernetes.protobuf,application/json", + wantResponseContentType: "application/vnd.kubernetes.protobuf", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithProtobufPreferredGeneratedClient, + }, + { + name: "cbor not allowed and not preferred client forces protobuf", + served: true, + allowed: false, + preferred: false, + wantRequestContentType: "application/vnd.kubernetes.protobuf", + wantRequestAccept: "application/vnd.kubernetes.protobuf,application/json", + wantResponseContentType: "application/vnd.kubernetes.protobuf", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithProtobufPreferredGeneratedClient, + }, + { + name: "cbor not allowed and preferred client forces protobuf", + served: true, + allowed: false, + preferred: true, + wantRequestContentType: "application/vnd.kubernetes.protobuf", + wantRequestAccept: "application/vnd.kubernetes.protobuf,application/json", + wantResponseContentType: "application/vnd.kubernetes.protobuf", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithProtobufPreferredGeneratedClient, + }, + { + name: "fully disabled", + served: true, + allowed: false, + preferred: false, + wantRequestContentType: "application/json", + wantRequestAccept: "application/json, */*", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "send json accept both get json", + served: true, + allowed: true, + preferred: false, + wantRequestContentType: "application/json", + wantRequestAccept: "application/json, */*", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "send json accept both get json", + served: false, + allowed: true, + preferred: false, + wantRequestContentType: "application/json", + wantRequestAccept: "application/json, */*", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "send cbor accept both get cbor", + served: true, + allowed: true, + preferred: true, + wantRequestContentType: "application/cbor", + wantRequestAccept: "application/cbor, */*", + wantResponseContentType: "application/cbor", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "send cbor accept both get 415", + served: false, + allowed: true, + preferred: true, + wantRequestContentType: "application/cbor", + wantRequestAccept: "application/cbor, */*", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusUnsupportedMediaType, + wantStatusError: true, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "both gates required to send cbor", + served: true, + allowed: false, + preferred: true, + wantRequestContentType: "application/json", + wantRequestAccept: "application/json, */*", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "actively configured cbor", + served: true, + allowed: true, + preferred: false, + configuredContentType: "application/cbor", + configuredAccept: "application/cbor", + wantRequestContentType: "application/cbor", + wantRequestAccept: "application/cbor", + wantResponseContentType: "application/cbor", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "force disable actively configured cbor", + served: true, + allowed: false, + preferred: false, + configuredContentType: "application/cbor", + configuredAccept: "application/cbor", + wantRequestContentType: "application/json", + wantRequestAccept: "application/json", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "actively configured cbor with two accepted media types", + served: true, + allowed: true, + preferred: false, + configuredContentType: "application/cbor", + configuredAccept: "application/cbor;q=0.9,example/foo;q=0.8", + wantRequestContentType: "application/cbor", + wantRequestAccept: "application/cbor;q=0.9,example/foo;q=0.8", + wantResponseContentType: "application/cbor", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + { + name: "force disable actively configured cbor with two accepted media types", + served: true, + allowed: false, + preferred: false, + configuredContentType: "application/cbor", + configuredAccept: "application/cbor;q=0.9,example/foo;q=0.8", + wantRequestContentType: "application/json", + wantRequestAccept: "application/json; q=0.9,example/foo; q=0.8", + wantResponseContentType: "application/json", + wantResponseStatus: http.StatusCreated, + wantStatusError: false, + doRequest: DoRequestWithGeneratedClient, + }, + } + + for _, served := range []bool{true, false} { + t.Run(fmt.Sprintf("served=%t", served), func(t *testing.T) { + // Batch test cases with their server configuration instead of starting and stopping + // a new apiserver for each test case. + if served { + framework.EnableCBORServingAndStorageForTest(t) + } + + server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd()) + defer server.TearDownFn() + + apiextensionsClient, err := apiextensionsv1client.NewForConfig(server.ClientConfig) + if err != nil { + t.Fatal(err) + } + crd, err := apiextensionsClient.CustomResourceDefinitions().Create( + context.TODO(), + &apiextensionsv1.CustomResourceDefinition{ + ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("fischers.%s", wardlev1alpha1.SchemeGroupVersion.Group)}, + Spec: apiextensionsv1.CustomResourceDefinitionSpec{ + Group: wardlev1alpha1.SchemeGroupVersion.Group, + Versions: []apiextensionsv1.CustomResourceDefinitionVersion{{ + Name: wardlev1alpha1.SchemeGroupVersion.Version, + Served: true, + Storage: true, + Schema: &apiextensionsv1.CustomResourceValidation{ + OpenAPIV3Schema: &apiextensionsv1.JSONSchemaProps{ + XPreserveUnknownFields: ptr.To(true), + Type: "object", + }, + }, + }}, + Names: apiextensionsv1.CustomResourceDefinitionNames{ + Plural: "fischers", + Singular: "fischer", + Kind: "Fischer", + ListKind: "FischerList", + }, + Scope: apiextensionsv1.ClusterScoped, + }, + }, + metav1.CreateOptions{}, + ) + if err != nil { + t.Fatal(err) + } + + // wait to see cr in discovery + discoveryClient, err := discovery.NewDiscoveryClientForConfig(server.ClientConfig) + if err != nil { + t.Fatal(err) + } + if err := wait.PollUntilContextTimeout(context.TODO(), 100*time.Millisecond, 5*time.Second, true, func(context.Context) (done bool, err error) { + resources, err := discoveryClient.ServerResourcesForGroupVersion(wardlev1alpha1.SchemeGroupVersion.String()) + if err != nil { + if apierrors.IsNotFound(err) { + return false, nil + } + return false, err + } + for _, resource := range resources.APIResources { + if resource.Name == crd.Spec.Names.Plural { + return true, nil + } + } + return false, nil + }); err != nil { + t.Fatal(err) + } + + for _, tc := range testCases { + if tc.served != served { + continue + } + + t.Run(tc.name, func(t *testing.T) { + framework.SetTestOnlyCBORClientFeatureGatesForTest(t, tc.allowed, tc.preferred) + + config := rest.CopyConfig(server.ClientConfig) + config.ContentType = tc.configuredContentType + config.AcceptContentTypes = tc.configuredAccept + config.Wrap(func(rt http.RoundTripper) http.RoundTripper { + return roundTripperFunc(func(request *http.Request) (*http.Response, error) { + response, err := rt.RoundTrip(request) + if got := response.Request.Header.Get("Content-Type"); got != tc.wantRequestContentType { + t.Errorf("want request content type %q, got %q", tc.wantRequestContentType, got) + } + if got := response.Request.Header.Get("Accept"); got != tc.wantRequestAccept { + t.Errorf("want request accept %q, got %q", tc.wantRequestAccept, got) + } + if got := response.Header.Get("Content-Type"); got != tc.wantResponseContentType { + t.Errorf("want response content type %q, got %q", tc.wantResponseContentType, got) + } + if got := response.StatusCode; got != tc.wantResponseStatus { + t.Errorf("want response status %d, got %d", tc.wantResponseStatus, got) + } + return response, err + }) + }) + + err := tc.doRequest(t, config) + switch { + case tc.wantStatusError && apierrors.IsUnsupportedMediaType(err): + // ok + case !tc.wantStatusError && err == nil: + // ok + default: + t.Errorf("unexpected error: %v", err) + } + }) + } + }) + } +} + +func TestCBORWithTypedClient(t *testing.T) { + ktesting.SetDefaultVerbosity(10) // todo + + framework.EnableCBORServingAndStorageForTest(t) + framework.SetTestOnlyCBORClientFeatureGatesForTest(t, true, true) + + server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd()) + t.Cleanup(server.TearDownFn) + + const TestNamespace = "test-cbor-typed-client" + + { + // Setup using client with default config. + clientset, err := clientset.NewForConfig(server.ClientConfig) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { + if err := clientset.CoreV1().Namespaces().Delete(context.TODO(), TestNamespace, metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) { + t.Fatal(err) + } + }) + if _, err := clientset.CoreV1().Namespaces().Create(context.TODO(), &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: TestNamespace}}, metav1.CreateOptions{}); err != nil { + t.Fatal(err) + } + } + + config := rest.CopyConfig(server.ClientConfig) + // Content negotiation controlled by client feature gates. + config.ContentType = "" + config.AcceptContentTypes = "" + config.Wrap(framework.AssertRequestResponseAsCBOR(t)) + clientset, err := clientset.NewForConfig(config) + if err != nil { + t.Fatal(err) + } + + // Should be identical to + // https://github.com/kubernetes/kubernetes/blob/9ec52fc06395e6ac2fd7a947d6b9fbd3f1bbacb3/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/namespace.go#L64-L72 + // minus the PrefersProtobuf option, which overrides content negotiation to Protobuf on a + // per-request basis. + var secretClient corev1client.SecretInterface = gentype.NewClientWithListAndApply[*v1.Secret, *v1.SecretList, *corev1ac.SecretApplyConfiguration]( + "secrets", + clientset.CoreV1().RESTClient(), + clientscheme.ParameterCodec, + TestNamespace, + func() *v1.Secret { return &v1.Secret{} }, + func() *v1.SecretList { return &v1.SecretList{} }, + ) + + secret, err := secretClient.Create(context.TODO(), &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-secret", + }, + }, metav1.CreateOptions{}) + if err != nil { + t.Fatal(err) + } + + w, err := secretClient.Watch(context.TODO(), metav1.ListOptions{ResourceVersion: secret.ResourceVersion, FieldSelector: fmt.Sprintf("metadata.name=%s", secret.GetName())}) + if err != nil { + t.Fatal(err) + } + defer w.Stop() + + // do a real update to observe a watch event + if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { + s, err := secretClient.Get(context.TODO(), secret.GetName(), metav1.GetOptions{}) + if err != nil { + return err + } + if s.Annotations == nil { + s.Annotations = map[string]string{} + } + s.Annotations["foo"] = "bar" + _, err = secretClient.Update(context.TODO(), s, metav1.UpdateOptions{}) + return err + }); err != nil { + t.Fatal(err) + } + + var seen bool + timeout := time.After(5 * time.Second) + for !seen { + select { + case e, ok := <-w.ResultChan(): + if !ok { + t.Fatal("watch closed without receiving expected event") + } + + if e.Type == watch.Error { + t.Fatalf("watch received unexpected error event: %v", apierrors.FromObject(e.Object)) + } + + if ns, ok := e.Object.(*v1.Secret); ok && ns.GetAnnotations()["foo"] == "bar" { + // observed update + seen = true + break + } + case <-timeout: + t.Fatal("timed out waiting for event") + } + } + + if err := secretClient.Delete(context.TODO(), secret.GetName(), metav1.DeleteOptions{DryRun: []string{metav1.DryRunAll}}); err != nil { + t.Fatal(err) + } + + if err := secretClient.DeleteCollection(context.TODO(), metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: "a,!a"}); err != nil { + t.Fatal(err) + } + + if _, err := secretClient.Get(context.TODO(), secret.GetName(), metav1.GetOptions{}); err != nil { + t.Fatal(err) + } + + if _, err := secretClient.List(context.TODO(), metav1.ListOptions{}); err != nil { + t.Fatal(err) + } + + // for UpdateStatus + nsClient := gentype.NewClientWithListAndApply[*v1.Namespace, *v1.NamespaceList, *corev1ac.NamespaceApplyConfiguration]( + "namespaces", + clientset.CoreV1().RESTClient(), + clientscheme.ParameterCodec, + "", + func() *v1.Namespace { return &v1.Namespace{} }, + func() *v1.NamespaceList { return &v1.NamespaceList{} }, + ) + + if err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { + ns, err := nsClient.Get(context.TODO(), TestNamespace, metav1.GetOptions{}) + if err != nil { + return err + } + _, err = nsClient.UpdateStatus(context.TODO(), ns, metav1.UpdateOptions{DryRun: []string{metav1.DryRunAll}}) + return err + }); err != nil { + t.Fatal(err) + } +}