From 2742d1e42d117d2d857cbc7ddff9860143179819 Mon Sep 17 00:00:00 2001 From: hzxuzhonghu Date: Fri, 26 Jan 2018 10:32:46 +0800 Subject: [PATCH] refactor kube-aggregator api group install --- cmd/kube-apiserver/app/BUILD | 1 + cmd/kube-apiserver/app/aggregator.go | 5 +- cmd/kube-apiserver/app/options/BUILD | 2 +- cmd/kube-apiserver/app/options/validation.go | 4 +- .../kube-aggregator/pkg/apiserver/BUILD | 13 +++-- .../pkg/apiserver/apiserver.go | 49 +++------------- .../pkg/apiserver/handler_apis_test.go | 11 ++-- .../pkg/apiserver/scheme/BUILD | 32 +++++++++++ .../pkg/apiserver/scheme/scheme.go | 54 ++++++++++++++++++ .../kube-aggregator/pkg/cmd/server/BUILD | 1 + .../kube-aggregator/pkg/cmd/server/start.go | 11 ++-- .../pkg/registry/apiservice/BUILD | 1 + .../pkg/registry/apiservice/rest/BUILD | 34 +++++++++++ .../apiservice/rest/storage_apiservice.go | 56 +++++++++++++++++++ 14 files changed, 211 insertions(+), 63 deletions(-) create mode 100644 staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/BUILD create mode 100644 staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/scheme.go create mode 100644 staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/BUILD create mode 100644 staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/storage_apiservice.go diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index aa6d7440df3..2e48b70b633 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -81,6 +81,7 @@ go_library( "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apiserver:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/controllers/autoregister:go_default_library", diff --git a/cmd/kube-apiserver/app/aggregator.go b/cmd/kube-apiserver/app/aggregator.go index 900cbfd84c0..6cc58a24815 100644 --- a/cmd/kube-apiserver/app/aggregator.go +++ b/cmd/kube-apiserver/app/aggregator.go @@ -41,6 +41,7 @@ import ( "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion" "k8s.io/kube-aggregator/pkg/controllers/autoregister" @@ -59,14 +60,14 @@ func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, command // copy the etcd options so we don't mutate originals. etcdOptions := *commandOptions.Etcd - etcdOptions.StorageConfig.Codec = aggregatorapiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion) + etcdOptions.StorageConfig.Codec = aggregatorscheme.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion) genericConfig.RESTOptionsGetter = &genericoptions.SimpleRestOptionsFactory{Options: etcdOptions} // override MergedResourceConfig with aggregator defaults and registry if err := commandOptions.APIEnablement.ApplyTo( &genericConfig, aggregatorapiserver.DefaultAPIResourceConfigSource(), - aggregatorapiserver.Registry); err != nil { + aggregatorscheme.Registry); err != nil { return nil, err } diff --git a/cmd/kube-apiserver/app/options/BUILD b/cmd/kube-apiserver/app/options/BUILD index b8a88e67e13..ace989747c9 100644 --- a/cmd/kube-apiserver/app/options/BUILD +++ b/cmd/kube-apiserver/app/options/BUILD @@ -27,7 +27,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/options:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", - "//vendor/k8s.io/kube-aggregator/pkg/apiserver:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", ], ) diff --git a/cmd/kube-apiserver/app/options/validation.go b/cmd/kube-apiserver/app/options/validation.go index ece12a73e48..44f1df11d57 100644 --- a/cmd/kube-apiserver/app/options/validation.go +++ b/cmd/kube-apiserver/app/options/validation.go @@ -20,7 +20,7 @@ import ( "fmt" apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" - aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kubernetes/pkg/api/legacyscheme" ) @@ -79,7 +79,7 @@ func (options *ServerRunOptions) Validate() []error { if options.MasterCount <= 0 { errors = append(errors, fmt.Errorf("--apiserver-count should be a positive number, but value '%d' provided", options.MasterCount)) } - if errs := options.APIEnablement.Validate(legacyscheme.Registry, apiextensionsapiserver.Registry, aggregatorapiserver.Registry); len(errs) > 0 { + if errs := options.APIEnablement.Validate(legacyscheme.Registry, apiextensionsapiserver.Registry, aggregatorscheme.Registry); len(errs) > 0 { errors = append(errors, errs...) } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD index ac603e14808..4ddb06b98c4 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD @@ -25,6 +25,7 @@ go_test( "//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion:go_default_library", ], ) @@ -42,8 +43,6 @@ go_library( deps = [ "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -59,7 +58,6 @@ go_library( "//vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library", "//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//vendor/k8s.io/apiserver/pkg/features:go_default_library", - "//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//vendor/k8s.io/apiserver/pkg/server:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", @@ -71,9 +69,9 @@ go_library( "//vendor/k8s.io/client-go/transport:go_default_library", "//vendor/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", - "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/install:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/informers/internalversion:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion:go_default_library", @@ -81,7 +79,7 @@ go_library( "//vendor/k8s.io/kube-aggregator/pkg/controllers:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/controllers/openapi:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/controllers/status:go_default_library", - "//vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/rest:go_default_library", ], ) @@ -94,6 +92,9 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme:all-srcs", + ], tags = ["automanaged"], ) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 435565c76cb..980b641f968 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -20,46 +20,32 @@ import ( "net/http" "time" - "k8s.io/apimachinery/pkg/apimachinery/announced" - "k8s.io/apimachinery/pkg/apimachinery/registered" 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/util/sets" genericapirequest "k8s.io/apiserver/pkg/endpoints/request" - "k8s.io/apiserver/pkg/registry/rest" genericapiserver "k8s.io/apiserver/pkg/server" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/client-go/pkg/version" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - "k8s.io/kube-aggregator/pkg/apis/apiregistration/install" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion" listers "k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion" openapicontroller "k8s.io/kube-aggregator/pkg/controllers/openapi" statuscontrollers "k8s.io/kube-aggregator/pkg/controllers/status" - apiservicestorage "k8s.io/kube-aggregator/pkg/registry/apiservice/etcd" -) - -var ( - groupFactoryRegistry = make(announced.APIGroupFactoryRegistry) - Registry = registered.NewOrDie("") - Scheme = runtime.NewScheme() - Codecs = serializer.NewCodecFactory(Scheme) + apiservicerest "k8s.io/kube-aggregator/pkg/registry/apiservice/rest" ) func init() { - install.Install(groupFactoryRegistry, Registry, Scheme) - // we need to add the options (like ListOptions) to empty v1 - metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Group: "", Version: "v1"}) + metav1.AddToGroupVersion(aggregatorscheme.Scheme, schema.GroupVersion{Group: "", Version: "v1"}) unversioned := schema.GroupVersion{Group: "", Version: "v1"} - Scheme.AddUnversionedTypes(unversioned, + aggregatorscheme.Scheme.AddUnversionedTypes(unversioned, &metav1.Status{}, &metav1.APIVersions{}, &metav1.APIGroupList{}, @@ -183,34 +169,13 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg serviceResolver: c.ExtraConfig.ServiceResolver, } - apiResourceConfig := c.GenericConfig.MergedResourceConfig - apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, Registry, Scheme, metav1.ParameterCodec, Codecs) - if apiResourceConfig.VersionEnabled(v1beta1.SchemeGroupVersion) { - apiGroupInfo.GroupMeta.GroupVersion = v1beta1.SchemeGroupVersion - storage := map[string]rest.Storage{} - // apiservices - apiServiceREST := apiservicestorage.NewREST(Scheme, c.GenericConfig.RESTOptionsGetter) - storage["apiservices"] = apiServiceREST - storage["apiservices/status"] = apiservicestorage.NewStatusREST(Scheme, apiServiceREST) - apiGroupInfo.VersionedResourcesStorageMap["v1beta1"] = storage - } - if apiResourceConfig.VersionEnabled(v1.SchemeGroupVersion) { - apiGroupInfo.GroupMeta.GroupVersion = v1.SchemeGroupVersion - storage := map[string]rest.Storage{} - // apiservices - apiServiceREST := apiservicestorage.NewREST(Scheme, c.GenericConfig.RESTOptionsGetter) - storage["apiservices"] = apiServiceREST - storage["apiservices/status"] = apiservicestorage.NewStatusREST(Scheme, apiServiceREST) - - apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage - } - + apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter) if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil { return nil, err } apisHandler := &apisHandler{ - codecs: Codecs, + codecs: aggregatorscheme.Codecs, lister: s.lister, mapper: s.contextMapper, } @@ -313,7 +278,7 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er // it's time to register the group aggregation endpoint groupPath := "/apis/" + apiService.Spec.Group groupDiscoveryHandler := &apiGroupHandler{ - codecs: Codecs, + codecs: aggregatorscheme.Codecs, groupName: apiService.Spec.Group, lister: s.lister, delegate: s.delegateHandler, diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis_test.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis_test.go index d3aba698bd3..32aef625f54 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis_test.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/kube-aggregator/pkg/apis/apiregistration" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" listers "k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion" ) @@ -242,7 +243,7 @@ func TestAPIs(t *testing.T) { mapper := request.NewRequestContextMapper() indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) handler := &apisHandler{ - codecs: Codecs, + codecs: aggregatorscheme.Codecs, lister: listers.NewAPIServiceLister(indexer), mapper: mapper, } @@ -265,7 +266,7 @@ func TestAPIs(t *testing.T) { } actual := &metav1.APIGroupList{} - if err := runtime.DecodeInto(Codecs.UniversalDecoder(), bytes, actual); err != nil { + if err := runtime.DecodeInto(aggregatorscheme.Codecs.UniversalDecoder(), bytes, actual); err != nil { t.Errorf("%s: %v", tc.name, err) continue } @@ -280,7 +281,7 @@ func TestAPIGroupMissing(t *testing.T) { mapper := request.NewRequestContextMapper() indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) handler := &apiGroupHandler{ - codecs: Codecs, + codecs: aggregatorscheme.Codecs, lister: listers.NewAPIServiceLister(indexer), groupName: "groupName", delegate: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -427,7 +428,7 @@ func TestAPIGroup(t *testing.T) { mapper := request.NewRequestContextMapper() indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) handler := &apiGroupHandler{ - codecs: Codecs, + codecs: aggregatorscheme.Codecs, lister: listers.NewAPIServiceLister(indexer), groupName: "foo", contextMapper: mapper, @@ -456,7 +457,7 @@ func TestAPIGroup(t *testing.T) { } actual := &metav1.APIGroup{} - if err := runtime.DecodeInto(Codecs.UniversalDecoder(), bytes, actual); err != nil { + if err := runtime.DecodeInto(aggregatorscheme.Codecs.UniversalDecoder(), bytes, actual); err != nil { t.Errorf("%s: %v", tc.name, err) continue } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/BUILD b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/BUILD new file mode 100644 index 00000000000..e183702792c --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["scheme.go"], + importpath = "k8s.io/kube-aggregator/pkg/apiserver/scheme", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/install:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/scheme.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/scheme.go new file mode 100644 index 00000000000..39cd3e9f4f5 --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/scheme/scheme.go @@ -0,0 +1,54 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package scheme + +import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + + "k8s.io/kube-aggregator/pkg/apis/apiregistration" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/install" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" +) + +var ( + // Scheme defines methods for serializing and deserializing API objects. + Scheme = runtime.NewScheme() + // Codecs provides methods for retrieving codecs and serializers for specific + // versions and content types. + Codecs = serializer.NewCodecFactory(Scheme) + // groupFactoryRegistry is the APIGroupFactoryRegistry. + groupFactoryRegistry = make(announced.APIGroupFactoryRegistry) + // Registry is an instance of an API registry. This is an interim step to start removing the idea of a global + // API registry. + Registry = registered.NewOrDie("") +) + +func init() { + AddToScheme(Scheme) + install.Install(groupFactoryRegistry, Registry, Scheme) +} + +// AddToScheme adds the types of this group into the given scheme. +func AddToScheme(scheme *runtime.Scheme) { + v1beta1.AddToScheme(scheme) + v1.AddToScheme(scheme) + apiregistration.AddToScheme(scheme) +} diff --git a/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/BUILD b/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/BUILD index 15974eb7c37..c19b7356cd0 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/BUILD +++ b/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/BUILD @@ -19,6 +19,7 @@ go_library( "//vendor/k8s.io/apiserver/pkg/server/options:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", "//vendor/k8s.io/kube-aggregator/pkg/apiserver:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", ], ) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go b/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go index 83c83aa3bf8..67c444044e7 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go @@ -31,6 +31,7 @@ import ( genericoptions "k8s.io/apiserver/pkg/server/options" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" "k8s.io/kube-aggregator/pkg/apiserver" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" ) const defaultEtcdPathPrefix = "/registry/kube-aggregator.kubernetes.io/" @@ -84,7 +85,7 @@ func (o *AggregatorOptions) AddFlags(fs *pflag.FlagSet) { // NewDefaultOptions builds a "normal" set of options. You wouldn't normally expose this, but hyperkube isn't cobra compatible func NewDefaultOptions(out, err io.Writer) *AggregatorOptions { o := &AggregatorOptions{ - RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, apiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion)), + RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, aggregatorscheme.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion)), APIEnablement: genericoptions.NewAPIEnablementOptions(), StdOut: out, @@ -97,7 +98,7 @@ func NewDefaultOptions(out, err io.Writer) *AggregatorOptions { func (o AggregatorOptions) Validate(args []string) error { errors := []error{} errors = append(errors, o.RecommendedOptions.Validate()...) - errors = append(errors, o.APIEnablement.Validate(apiserver.Registry)...) + errors = append(errors, o.APIEnablement.Validate(aggregatorscheme.Registry)...) return utilerrors.NewAggregate(errors) } @@ -111,12 +112,12 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error { return fmt.Errorf("error creating self-signed certificates: %v", err) } - serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs) + serverConfig := genericapiserver.NewRecommendedConfig(aggregatorscheme.Codecs) - if err := o.RecommendedOptions.ApplyTo(serverConfig, apiserver.Scheme); err != nil { + if err := o.RecommendedOptions.ApplyTo(serverConfig, aggregatorscheme.Scheme); err != nil { return err } - if err := o.APIEnablement.ApplyTo(&serverConfig.Config, apiserver.DefaultAPIResourceConfigSource(), apiserver.Registry); err != nil { + if err := o.APIEnablement.ApplyTo(&serverConfig.Config, apiserver.DefaultAPIResourceConfigSource(), aggregatorscheme.Registry); err != nil { return err } serverConfig.LongRunningFunc = filters.BasicLongRunningRequestCheck( diff --git a/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD index ff17cc2e9b9..751de834adb 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD +++ b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/BUILD @@ -35,6 +35,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd:all-srcs", + "//staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest:all-srcs", ], tags = ["automanaged"], ) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/BUILD b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/BUILD new file mode 100644 index 00000000000..864bb0bbfbe --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/BUILD @@ -0,0 +1,34 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["storage_apiservice.go"], + importpath = "k8s.io/kube-aggregator/pkg/registry/apiservice/rest", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//vendor/k8s.io/apiserver/pkg/server:go_default_library", + "//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library", + "//vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/etcd:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/storage_apiservice.go b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/storage_apiservice.go new file mode 100644 index 00000000000..ef0c875dd83 --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/pkg/registry/apiservice/rest/storage_apiservice.go @@ -0,0 +1,56 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/registry/generic" + "k8s.io/apiserver/pkg/registry/rest" + genericapiserver "k8s.io/apiserver/pkg/server" + serverstorage "k8s.io/apiserver/pkg/server/storage" + + "k8s.io/kube-aggregator/pkg/apis/apiregistration" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" + aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" + apiservicestorage "k8s.io/kube-aggregator/pkg/registry/apiservice/etcd" +) + +// NewRESTStorage returns an APIGroupInfo object that will work against apiservice. +func NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) genericapiserver.APIGroupInfo { + apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, aggregatorscheme.Registry, aggregatorscheme.Scheme, metav1.ParameterCodec, aggregatorscheme.Codecs) + + if apiResourceConfigSource.VersionEnabled(v1beta1.SchemeGroupVersion) { + apiGroupInfo.GroupMeta.GroupVersion = v1beta1.SchemeGroupVersion + storage := map[string]rest.Storage{} + apiServiceREST := apiservicestorage.NewREST(aggregatorscheme.Scheme, restOptionsGetter) + storage["apiservices"] = apiServiceREST + storage["apiservices/status"] = apiservicestorage.NewStatusREST(aggregatorscheme.Scheme, apiServiceREST) + apiGroupInfo.VersionedResourcesStorageMap["v1beta1"] = storage + } + + if apiResourceConfigSource.VersionEnabled(v1.SchemeGroupVersion) { + apiGroupInfo.GroupMeta.GroupVersion = v1.SchemeGroupVersion + storage := map[string]rest.Storage{} + apiServiceREST := apiservicestorage.NewREST(aggregatorscheme.Scheme, restOptionsGetter) + storage["apiservices"] = apiServiceREST + storage["apiservices/status"] = apiservicestorage.NewStatusREST(aggregatorscheme.Scheme, apiServiceREST) + apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage + } + + return apiGroupInfo +}