mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
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:
commit
f11258ad81
@ -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",
|
||||||
],
|
],
|
||||||
|
Loading…
Reference in New Issue
Block a user