Merge pull request #42672 from deads2k/agg-24-use-custom-scheme
Automatic merge from submit-queue (batch tested with PRs 42672, 42770, 42818, 42820, 40849) use separate scheme to serve the kube-aggregator This removes a hack which used the client scheme to serve the kube-aggregator. This switches it to run from its own scheme. @kubernetes/sig-api-machinery-pr-reviews @ncdc
This commit is contained in:
		@@ -21,15 +21,10 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/apimachinery/registered"
 | 
						"k8s.io/apimachinery/pkg/apimachinery/registered"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					 | 
				
			||||||
	Install(api.GroupFactoryRegistry, api.Registry, api.Scheme)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Install registers the API group and adds types to a scheme
 | 
					// Install registers the API group and adds types to a scheme
 | 
				
			||||||
func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) {
 | 
					func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) {
 | 
				
			||||||
	if err := announced.NewGroupMetaFactory(
 | 
						if err := announced.NewGroupMetaFactory(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,12 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"time"
 | 
						"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"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
 | 
						genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
 | 
				
			||||||
	genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
 | 
						genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
 | 
				
			||||||
@@ -30,19 +36,40 @@ import (
 | 
				
			|||||||
	kubeinformers "k8s.io/client-go/informers"
 | 
						kubeinformers "k8s.io/client-go/informers"
 | 
				
			||||||
	kubeclientset "k8s.io/client-go/kubernetes"
 | 
						kubeclientset "k8s.io/client-go/kubernetes"
 | 
				
			||||||
	v1listers "k8s.io/client-go/listers/core/v1"
 | 
						v1listers "k8s.io/client-go/listers/core/v1"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/client-go/pkg/version"
 | 
						"k8s.io/client-go/pkg/version"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
				
			||||||
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration/install"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset"
 | 
						"k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset"
 | 
				
			||||||
	informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion"
 | 
						informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion"
 | 
				
			||||||
	listers "k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion"
 | 
						listers "k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion"
 | 
				
			||||||
	apiservicestorage "k8s.io/kube-aggregator/pkg/registry/apiservice/etcd"
 | 
						apiservicestorage "k8s.io/kube-aggregator/pkg/registry/apiservice/etcd"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	_ "k8s.io/client-go/pkg/api/install"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						groupFactoryRegistry = make(announced.APIGroupFactoryRegistry)
 | 
				
			||||||
 | 
						registry             = registered.NewOrDie("")
 | 
				
			||||||
 | 
						Scheme               = runtime.NewScheme()
 | 
				
			||||||
 | 
						Codecs               = serializer.NewCodecFactory(Scheme)
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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"})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unversioned := schema.GroupVersion{Group: "", Version: "v1"}
 | 
				
			||||||
 | 
						Scheme.AddUnversionedTypes(unversioned,
 | 
				
			||||||
 | 
							&metav1.Status{},
 | 
				
			||||||
 | 
							&metav1.APIVersions{},
 | 
				
			||||||
 | 
							&metav1.APIGroupList{},
 | 
				
			||||||
 | 
							&metav1.APIGroup{},
 | 
				
			||||||
 | 
							&metav1.APIResourceList{},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// legacyAPIServiceName is the fixed name of the only non-groupified API version
 | 
					// legacyAPIServiceName is the fixed name of the only non-groupified API version
 | 
				
			||||||
const legacyAPIServiceName = "v1."
 | 
					const legacyAPIServiceName = "v1."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -140,10 +167,10 @@ func (c completedConfig) New(stopCh <-chan struct{}) (*APIAggregator, error) {
 | 
				
			|||||||
		proxyMux:         proxyMux,
 | 
							proxyMux:         proxyMux,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
 | 
						apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, registry, Scheme, metav1.ParameterCodec, Codecs)
 | 
				
			||||||
	apiGroupInfo.GroupMeta.GroupVersion = v1alpha1.SchemeGroupVersion
 | 
						apiGroupInfo.GroupMeta.GroupVersion = v1alpha1.SchemeGroupVersion
 | 
				
			||||||
	v1alpha1storage := map[string]rest.Storage{}
 | 
						v1alpha1storage := map[string]rest.Storage{}
 | 
				
			||||||
	v1alpha1storage["apiservices"] = apiservicestorage.NewREST(c.GenericConfig.RESTOptionsGetter)
 | 
						v1alpha1storage["apiservices"] = apiservicestorage.NewREST(Scheme, c.GenericConfig.RESTOptionsGetter)
 | 
				
			||||||
	apiGroupInfo.VersionedResourcesStorageMap["v1alpha1"] = v1alpha1storage
 | 
						apiGroupInfo.VersionedResourcesStorageMap["v1alpha1"] = v1alpha1storage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil {
 | 
						if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil {
 | 
				
			||||||
@@ -178,7 +205,7 @@ type handlerChainConfig struct {
 | 
				
			|||||||
// the endpoints differently, since we're proxying all groups except for apiregistration.k8s.io.
 | 
					// the endpoints differently, since we're proxying all groups except for apiregistration.k8s.io.
 | 
				
			||||||
func (h *handlerChainConfig) handlerChain(apiHandler http.Handler, c *genericapiserver.Config) (secure, insecure http.Handler) {
 | 
					func (h *handlerChainConfig) handlerChain(apiHandler http.Handler, c *genericapiserver.Config) (secure, insecure http.Handler) {
 | 
				
			||||||
	// add this as a filter so that we never collide with "already registered" failures on `/apis`
 | 
						// add this as a filter so that we never collide with "already registered" failures on `/apis`
 | 
				
			||||||
	handler := WithAPIs(apiHandler, h.informers.Apiregistration().InternalVersion().APIServices(), h.serviceLister, h.endpointsLister)
 | 
						handler := WithAPIs(apiHandler, Codecs, h.informers.Apiregistration().InternalVersion().APIServices(), h.serviceLister, h.endpointsLister)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handler = genericapifilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
						handler = genericapifilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -244,6 +271,7 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) {
 | 
				
			|||||||
	// it's time to register the group aggregation endpoint
 | 
						// it's time to register the group aggregation endpoint
 | 
				
			||||||
	groupPath := "/apis/" + apiService.Spec.Group
 | 
						groupPath := "/apis/" + apiService.Spec.Group
 | 
				
			||||||
	groupDiscoveryHandler := &apiGroupHandler{
 | 
						groupDiscoveryHandler := &apiGroupHandler{
 | 
				
			||||||
 | 
							codecs:          Codecs,
 | 
				
			||||||
		groupName:       apiService.Spec.Group,
 | 
							groupName:       apiService.Spec.Group,
 | 
				
			||||||
		lister:          s.lister,
 | 
							lister:          s.lister,
 | 
				
			||||||
		serviceLister:   s.serviceLister,
 | 
							serviceLister:   s.serviceLister,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,9 +24,9 @@ import (
 | 
				
			|||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
 | 
						"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
 | 
				
			||||||
	v1listers "k8s.io/client-go/listers/core/v1"
 | 
						v1listers "k8s.io/client-go/listers/core/v1"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
						apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
				
			||||||
	apiregistrationv1alpha1api "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
						apiregistrationv1alpha1api "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
				
			||||||
@@ -35,8 +35,9 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WithAPIs adds the handling for /apis and /apis/<group: -apiregistration.k8s.io>.
 | 
					// WithAPIs adds the handling for /apis and /apis/<group: -apiregistration.k8s.io>.
 | 
				
			||||||
func WithAPIs(handler http.Handler, informer informers.APIServiceInformer, serviceLister v1listers.ServiceLister, endpointsLister v1listers.EndpointsLister) http.Handler {
 | 
					func WithAPIs(handler http.Handler, codecs serializer.CodecFactory, informer informers.APIServiceInformer, serviceLister v1listers.ServiceLister, endpointsLister v1listers.EndpointsLister) http.Handler {
 | 
				
			||||||
	apisHandler := &apisHandler{
 | 
						apisHandler := &apisHandler{
 | 
				
			||||||
 | 
							codecs:          codecs,
 | 
				
			||||||
		lister:          informer.Lister(),
 | 
							lister:          informer.Lister(),
 | 
				
			||||||
		delegate:        handler,
 | 
							delegate:        handler,
 | 
				
			||||||
		serviceLister:   serviceLister,
 | 
							serviceLister:   serviceLister,
 | 
				
			||||||
@@ -50,6 +51,7 @@ func WithAPIs(handler http.Handler, informer informers.APIServiceInformer, servi
 | 
				
			|||||||
// apisHandler serves the `/apis` endpoint.
 | 
					// apisHandler serves the `/apis` endpoint.
 | 
				
			||||||
// This is registered as a filter so that it never collides with any explictly registered endpoints
 | 
					// This is registered as a filter so that it never collides with any explictly registered endpoints
 | 
				
			||||||
type apisHandler struct {
 | 
					type apisHandler struct {
 | 
				
			||||||
 | 
						codecs serializer.CodecFactory
 | 
				
			||||||
	lister listers.APIServiceLister
 | 
						lister listers.APIServiceLister
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serviceLister   v1listers.ServiceLister
 | 
						serviceLister   v1listers.ServiceLister
 | 
				
			||||||
@@ -107,7 +109,7 @@ func (r *apisHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json, err := runtime.Encode(api.Codecs.LegacyCodec(), discoveryGroupList)
 | 
						json, err := runtime.Encode(r.codecs.LegacyCodec(), discoveryGroupList)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
							http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -170,6 +172,7 @@ func convertToDiscoveryAPIGroup(apiServices []*apiregistrationapi.APIService, se
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// apiGroupHandler serves the `/apis/<group>` endpoint.
 | 
					// apiGroupHandler serves the `/apis/<group>` endpoint.
 | 
				
			||||||
type apiGroupHandler struct {
 | 
					type apiGroupHandler struct {
 | 
				
			||||||
 | 
						codecs    serializer.CodecFactory
 | 
				
			||||||
	groupName string
 | 
						groupName string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lister listers.APIServiceLister
 | 
						lister listers.APIServiceLister
 | 
				
			||||||
@@ -212,7 +215,7 @@ func (r *apiGroupHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
				
			|||||||
		http.Error(w, "", http.StatusNotFound)
 | 
							http.Error(w, "", http.StatusNotFound)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json, err := runtime.Encode(api.Codecs.LegacyCodec(), discoveryGroup)
 | 
						json, err := runtime.Encode(r.codecs.LegacyCodec(), discoveryGroup)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
							http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,6 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
	v1listers "k8s.io/client-go/listers/core/v1"
 | 
						v1listers "k8s.io/client-go/listers/core/v1"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
	corev1 "k8s.io/client-go/pkg/api/v1"
 | 
						corev1 "k8s.io/client-go/pkg/api/v1"
 | 
				
			||||||
	"k8s.io/client-go/tools/cache"
 | 
						"k8s.io/client-go/tools/cache"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,6 +48,7 @@ func TestAPIsDelegation(t *testing.T) {
 | 
				
			|||||||
	indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
						indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
				
			||||||
	delegate := &delegationHTTPHandler{}
 | 
						delegate := &delegationHTTPHandler{}
 | 
				
			||||||
	handler := &apisHandler{
 | 
						handler := &apisHandler{
 | 
				
			||||||
 | 
							codecs:   Codecs,
 | 
				
			||||||
		lister:   listers.NewAPIServiceLister(indexer),
 | 
							lister:   listers.NewAPIServiceLister(indexer),
 | 
				
			||||||
		delegate: delegate,
 | 
							delegate: delegate,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -271,6 +271,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
		endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
							endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
				
			||||||
		delegate := &delegationHTTPHandler{}
 | 
							delegate := &delegationHTTPHandler{}
 | 
				
			||||||
		handler := &apisHandler{
 | 
							handler := &apisHandler{
 | 
				
			||||||
 | 
								codecs:          Codecs,
 | 
				
			||||||
			serviceLister:   v1listers.NewServiceLister(serviceIndexer),
 | 
								serviceLister:   v1listers.NewServiceLister(serviceIndexer),
 | 
				
			||||||
			endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer),
 | 
								endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer),
 | 
				
			||||||
			lister:          listers.NewAPIServiceLister(indexer),
 | 
								lister:          listers.NewAPIServiceLister(indexer),
 | 
				
			||||||
@@ -303,7 +304,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		actual := &metav1.APIGroupList{}
 | 
							actual := &metav1.APIGroupList{}
 | 
				
			||||||
		if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), bytes, actual); err != nil {
 | 
							if err := runtime.DecodeInto(Codecs.UniversalDecoder(), bytes, actual); err != nil {
 | 
				
			||||||
			t.Errorf("%s: %v", tc.name, err)
 | 
								t.Errorf("%s: %v", tc.name, err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -317,6 +318,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
func TestAPIGroupMissing(t *testing.T) {
 | 
					func TestAPIGroupMissing(t *testing.T) {
 | 
				
			||||||
	indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
						indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
				
			||||||
	handler := &apiGroupHandler{
 | 
						handler := &apiGroupHandler{
 | 
				
			||||||
 | 
							codecs:    Codecs,
 | 
				
			||||||
		lister:    listers.NewAPIServiceLister(indexer),
 | 
							lister:    listers.NewAPIServiceLister(indexer),
 | 
				
			||||||
		groupName: "foo",
 | 
							groupName: "foo",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -428,6 +430,7 @@ func TestAPIGroup(t *testing.T) {
 | 
				
			|||||||
		serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
							serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
				
			||||||
		endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
							endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
 | 
				
			||||||
		handler := &apiGroupHandler{
 | 
							handler := &apiGroupHandler{
 | 
				
			||||||
 | 
								codecs:          Codecs,
 | 
				
			||||||
			lister:          listers.NewAPIServiceLister(indexer),
 | 
								lister:          listers.NewAPIServiceLister(indexer),
 | 
				
			||||||
			serviceLister:   v1listers.NewServiceLister(serviceIndexer),
 | 
								serviceLister:   v1listers.NewServiceLister(serviceIndexer),
 | 
				
			||||||
			endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer),
 | 
								endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer),
 | 
				
			||||||
@@ -465,7 +468,7 @@ func TestAPIGroup(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		actual := &metav1.APIGroup{}
 | 
							actual := &metav1.APIGroup{}
 | 
				
			||||||
		if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), bytes, actual); err != nil {
 | 
							if err := runtime.DecodeInto(Codecs.UniversalDecoder(), bytes, actual); err != nil {
 | 
				
			||||||
			t.Errorf("%s: %v", tc.name, err)
 | 
								t.Errorf("%s: %v", tc.name, err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,6 @@ import (
 | 
				
			|||||||
	"k8s.io/apiserver/pkg/server/filters"
 | 
						"k8s.io/apiserver/pkg/server/filters"
 | 
				
			||||||
	genericoptions "k8s.io/apiserver/pkg/server/options"
 | 
						genericoptions "k8s.io/apiserver/pkg/server/options"
 | 
				
			||||||
	kubeclientset "k8s.io/client-go/kubernetes"
 | 
						kubeclientset "k8s.io/client-go/kubernetes"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/client-go/rest"
 | 
						"k8s.io/client-go/rest"
 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1"
 | 
				
			||||||
@@ -92,7 +91,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
 | 
					// 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 {
 | 
					func NewDefaultOptions(out, err io.Writer) *AggregatorOptions {
 | 
				
			||||||
	o := &AggregatorOptions{
 | 
						o := &AggregatorOptions{
 | 
				
			||||||
		RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, api.Scheme, api.Codecs.LegacyCodec(v1alpha1.SchemeGroupVersion)),
 | 
							RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, apiserver.Scheme, apiserver.Codecs.LegacyCodec(v1alpha1.SchemeGroupVersion)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		StdOut: out,
 | 
							StdOut: out,
 | 
				
			||||||
		StdErr: err,
 | 
							StdErr: err,
 | 
				
			||||||
@@ -116,7 +115,7 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serverConfig := genericapiserver.NewConfig().
 | 
						serverConfig := genericapiserver.NewConfig().
 | 
				
			||||||
		WithSerializer(api.Codecs)
 | 
							WithSerializer(apiserver.Codecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := o.RecommendedOptions.ApplyTo(serverConfig); err != nil {
 | 
						if err := o.RecommendedOptions.ApplyTo(serverConfig); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,6 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/registry/generic"
 | 
						"k8s.io/apiserver/pkg/registry/generic"
 | 
				
			||||||
	genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
 | 
						genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
 | 
				
			||||||
	"k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/registry/apiservice"
 | 
						"k8s.io/kube-aggregator/pkg/registry/apiservice"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -31,9 +30,10 @@ type REST struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewREST returns a RESTStorage object that will work against API services.
 | 
					// NewREST returns a RESTStorage object that will work against API services.
 | 
				
			||||||
func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
 | 
					func NewREST(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) *REST {
 | 
				
			||||||
 | 
						strategy := apiservice.NewStrategy(scheme)
 | 
				
			||||||
	store := &genericregistry.Store{
 | 
						store := &genericregistry.Store{
 | 
				
			||||||
		Copier:      api.Scheme,
 | 
							Copier:      scheme,
 | 
				
			||||||
		NewFunc:     func() runtime.Object { return &apiregistration.APIService{} },
 | 
							NewFunc:     func() runtime.Object { return &apiregistration.APIService{} },
 | 
				
			||||||
		NewListFunc: func() runtime.Object { return &apiregistration.APIServiceList{} },
 | 
							NewListFunc: func() runtime.Object { return &apiregistration.APIServiceList{} },
 | 
				
			||||||
		ObjectNameFunc: func(obj runtime.Object) (string, error) {
 | 
							ObjectNameFunc: func(obj runtime.Object) (string, error) {
 | 
				
			||||||
@@ -43,9 +43,9 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
 | 
				
			|||||||
		QualifiedResource: apiregistration.Resource("apiservices"),
 | 
							QualifiedResource: apiregistration.Resource("apiservices"),
 | 
				
			||||||
		WatchCacheSize:    100,
 | 
							WatchCacheSize:    100,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CreateStrategy: apiservice.Strategy,
 | 
							CreateStrategy: strategy,
 | 
				
			||||||
		UpdateStrategy: apiservice.Strategy,
 | 
							UpdateStrategy: strategy,
 | 
				
			||||||
		DeleteStrategy: apiservice.Strategy,
 | 
							DeleteStrategy: strategy,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: apiservice.GetAttrs}
 | 
						options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: apiservice.GetAttrs}
 | 
				
			||||||
	if err := store.CompleteWithOptions(options); err != nil {
 | 
						if err := store.CompleteWithOptions(options); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@ import (
 | 
				
			|||||||
	"k8s.io/apiserver/pkg/registry/generic"
 | 
						"k8s.io/apiserver/pkg/registry/generic"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/storage"
 | 
						"k8s.io/apiserver/pkg/storage"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/storage/names"
 | 
						"k8s.io/apiserver/pkg/storage/names"
 | 
				
			||||||
	kapi "k8s.io/client-go/pkg/api"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration"
 | 
				
			||||||
	"k8s.io/kube-aggregator/pkg/apis/apiregistration/validation"
 | 
						"k8s.io/kube-aggregator/pkg/apis/apiregistration/validation"
 | 
				
			||||||
@@ -38,7 +37,9 @@ type apiServerStrategy struct {
 | 
				
			|||||||
	names.NameGenerator
 | 
						names.NameGenerator
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var Strategy = apiServerStrategy{kapi.Scheme, names.SimpleNameGenerator}
 | 
					func NewStrategy(typer runtime.ObjectTyper) apiServerStrategy {
 | 
				
			||||||
 | 
						return apiServerStrategy{typer, names.SimpleNameGenerator}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (apiServerStrategy) NamespaceScoped() bool {
 | 
					func (apiServerStrategy) NamespaceScoped() bool {
 | 
				
			||||||
	return false
 | 
						return false
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -15406,7 +15406,6 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
@@ -15464,7 +15463,6 @@ go_test(
 | 
				
			|||||||
        "//vendor:k8s.io/apiserver/pkg/authentication/user",
 | 
					        "//vendor:k8s.io/apiserver/pkg/authentication/user",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/endpoints/request",
 | 
					        "//vendor:k8s.io/apiserver/pkg/endpoints/request",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/listers/core/v1",
 | 
					        "//vendor:k8s.io/client-go/listers/core/v1",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api/v1",
 | 
					        "//vendor:k8s.io/client-go/pkg/api/v1",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/tools/cache",
 | 
					        "//vendor:k8s.io/client-go/tools/cache",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
				
			||||||
@@ -15484,9 +15482,13 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//vendor:github.com/golang/glog",
 | 
					        "//vendor:github.com/golang/glog",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/api/errors",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/api/errors",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/labels",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/labels",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime/schema",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/httpstream/spdy",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/httpstream/spdy",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
				
			||||||
@@ -15501,14 +15503,13 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/client-go/informers",
 | 
					        "//vendor:k8s.io/client-go/informers",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/kubernetes",
 | 
					        "//vendor:k8s.io/client-go/kubernetes",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/listers/core/v1",
 | 
					        "//vendor:k8s.io/client-go/listers/core/v1",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api/install",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/version",
 | 
					        "//vendor:k8s.io/client-go/pkg/version",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/rest",
 | 
					        "//vendor:k8s.io/client-go/rest",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/tools/cache",
 | 
					        "//vendor:k8s.io/client-go/tools/cache",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/transport",
 | 
					        "//vendor:k8s.io/client-go/transport",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/util/workqueue",
 | 
					        "//vendor:k8s.io/client-go/util/workqueue",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/install",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/client/informers/internalversion",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/client/informers/internalversion",
 | 
				
			||||||
@@ -15878,7 +15879,6 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/apiserver/pkg/server/filters",
 | 
					        "//vendor:k8s.io/apiserver/pkg/server/filters",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/server/options",
 | 
					        "//vendor:k8s.io/apiserver/pkg/server/options",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/kubernetes",
 | 
					        "//vendor:k8s.io/client-go/kubernetes",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/client-go/rest",
 | 
					        "//vendor:k8s.io/client-go/rest",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/tools/clientcmd",
 | 
					        "//vendor:k8s.io/client-go/tools/clientcmd",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/v1alpha1",
 | 
				
			||||||
@@ -15899,7 +15899,6 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/apiserver/pkg/registry/generic",
 | 
					        "//vendor:k8s.io/apiserver/pkg/registry/generic",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/storage",
 | 
					        "//vendor:k8s.io/apiserver/pkg/storage",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/storage/names",
 | 
					        "//vendor:k8s.io/apiserver/pkg/storage/names",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/validation",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration/validation",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
@@ -15913,7 +15912,6 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/registry/generic",
 | 
					        "//vendor:k8s.io/apiserver/pkg/registry/generic",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/registry/generic/registry",
 | 
					        "//vendor:k8s.io/apiserver/pkg/registry/generic/registry",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api",
 | 
					 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/apis/apiregistration",
 | 
				
			||||||
        "//vendor:k8s.io/kube-aggregator/pkg/registry/apiservice",
 | 
					        "//vendor:k8s.io/kube-aggregator/pkg/registry/apiservice",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user