From 99aa87029c967cd28f61d9d4a53b175607f3d7f8 Mon Sep 17 00:00:00 2001 From: Vishal Choudhary Date: Mon, 5 Feb 2024 18:19:25 +0530 Subject: [PATCH] feat: add serializer to remove protobuf support Signed-off-by: Vishal Choudhary --- pkg/api/install.go | 2 ++ pkg/api/serializer.go | 37 +++++++++++++++++++++++++++++++++++++ pkg/app/opts/options.go | 3 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 pkg/api/serializer.go diff --git a/pkg/api/install.go b/pkg/api/install.go index c73a941..8fd8628 100644 --- a/pkg/api/install.go +++ b/pkg/api/install.go @@ -51,6 +51,7 @@ func BuildPolicyReports(polr, cpolr rest.Storage) genericapiserver.APIGroupInfo "clusterpolicyreports": cpolr, } apiGroupInfo.VersionedResourcesStorageMap[v1alpha2.SchemeGroupVersion.Version] = policyReportsResources + apiGroupInfo.NegotiatedSerializer = DefaultSubsetNegotiatedSerializer(Codecs) return apiGroupInfo } @@ -63,6 +64,7 @@ func BuildEphemeralReports(ephr, cephr rest.Storage) genericapiserver.APIGroupIn "clusterephemeralreports": cephr, } apiGroupInfo.VersionedResourcesStorageMap[reportsv1.SchemeGroupVersion.Version] = ephemeralReportsResources + apiGroupInfo.NegotiatedSerializer = DefaultSubsetNegotiatedSerializer(Codecs) return apiGroupInfo } diff --git a/pkg/api/serializer.go b/pkg/api/serializer.go new file mode 100644 index 0000000..21473b6 --- /dev/null +++ b/pkg/api/serializer.go @@ -0,0 +1,37 @@ +package api + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +type subsetNegotiatedSerializer struct { + accepts []func(info runtime.SerializerInfo) bool + runtime.NegotiatedSerializer +} + +func (s subsetNegotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo { + base := s.NegotiatedSerializer.SupportedMediaTypes() + var filtered []runtime.SerializerInfo + for _, info := range base { + for _, accept := range s.accepts { + if accept(info) { + filtered = append(filtered, info) + break + } + } + } + return filtered +} + +func NoProtobuf(info runtime.SerializerInfo) bool { + return info.MediaType != runtime.ContentTypeProtobuf +} + +func SubsetNegotiatedSerializer(codecs serializer.CodecFactory, accepts ...func(info runtime.SerializerInfo) bool) runtime.NegotiatedSerializer { + return subsetNegotiatedSerializer{accepts, codecs} +} + +func DefaultSubsetNegotiatedSerializer(codecs serializer.CodecFactory) runtime.NegotiatedSerializer { + return SubsetNegotiatedSerializer(codecs, NoProtobuf) +} diff --git a/pkg/app/opts/options.go b/pkg/app/opts/options.go index 215fa5b..f99c7d3 100644 --- a/pkg/app/opts/options.go +++ b/pkg/app/opts/options.go @@ -167,7 +167,8 @@ func (o Options) restConfig() (*rest.Config, error) { return nil, fmt.Errorf("unable to construct lister client config: %v", err) } - // config.ContentType = "application/vnd.kubernetes.protobuf" + // config.ContentType = "application/json" + // config.AcceptContentTypes = "application/json,application/vnd.kubernetes.protobuf" err = rest.SetKubernetesDefaults(config) if err != nil {