SPLIT: kube-apiserver/corerest: split constructor

This commit is contained in:
Dr. Stefan Schimanski 2023-07-03 12:33:28 +02:00
parent 68b7685b2a
commit dad3e4d211
No known key found for this signature in database
GPG Key ID: 4C68E0F19F95EC33
3 changed files with 157 additions and 110 deletions

View File

@ -575,19 +575,21 @@ func labelAPIServerHeartbeatFunc(identity string) lease.ProcessLeaseFunc {
// InstallLegacyAPI will install the legacy APIs for the restStorageProviders if they are enabled. // InstallLegacyAPI will install the legacy APIs for the restStorageProviders if they are enabled.
func (m *Instance) InstallLegacyAPI(c *completedConfig, restOptionsGetter generic.RESTOptionsGetter) error { func (m *Instance) InstallLegacyAPI(c *completedConfig, restOptionsGetter generic.RESTOptionsGetter) error {
legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{ legacyRESTStorageProvider := corerest.LegacyRESTStorageProvider{
StorageFactory: c.ExtraConfig.StorageFactory, GenericLegacyRESTStorageProvider: corerest.GenericLegacyRESTStorageProvider{
ProxyTransport: c.ExtraConfig.ProxyTransport, StorageFactory: c.ExtraConfig.StorageFactory,
KubeletClientConfig: c.ExtraConfig.KubeletClientConfig, EventTTL: c.ExtraConfig.EventTTL,
EventTTL: c.ExtraConfig.EventTTL, LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig,
ServiceIPRange: c.ExtraConfig.ServiceIPRange, ServiceAccountIssuer: c.ExtraConfig.ServiceAccountIssuer,
SecondaryServiceIPRange: c.ExtraConfig.SecondaryServiceIPRange, ExtendExpiration: c.ExtraConfig.ExtendExpiration,
ServiceNodePortRange: c.ExtraConfig.ServiceNodePortRange, ServiceAccountMaxExpiration: c.ExtraConfig.ServiceAccountMaxExpiration,
LoopbackClientConfig: c.GenericConfig.LoopbackClientConfig, APIAudiences: c.GenericConfig.Authentication.APIAudiences,
ServiceAccountIssuer: c.ExtraConfig.ServiceAccountIssuer, Informers: c.ExtraConfig.VersionedInformers,
ExtendExpiration: c.ExtraConfig.ExtendExpiration, },
ServiceAccountMaxExpiration: c.ExtraConfig.ServiceAccountMaxExpiration, ProxyTransport: c.ExtraConfig.ProxyTransport,
APIAudiences: c.GenericConfig.Authentication.APIAudiences, KubeletClientConfig: c.ExtraConfig.KubeletClientConfig,
Informers: c.ExtraConfig.VersionedInformers, ServiceIPRange: c.ExtraConfig.ServiceIPRange,
SecondaryServiceIPRange: c.ExtraConfig.SecondaryServiceIPRange,
ServiceNodePortRange: c.ExtraConfig.ServiceNodePortRange,
} }
legacyRESTStorage, apiGroupInfo, err := legacyRESTStorageProvider.NewLegacyRESTStorage(c.ExtraConfig.APIResourceConfigSource, restOptionsGetter) legacyRESTStorage, apiGroupInfo, err := legacyRESTStorageProvider.NewLegacyRESTStorage(c.ExtraConfig.APIResourceConfigSource, restOptionsGetter)
if err != nil { if err != nil {

View File

@ -153,14 +153,16 @@ func TestLegacyRestStorageStrategies(t *testing.T) {
defer etcdserver.Terminate(t) defer etcdserver.Terminate(t)
storageProvider := corerest.LegacyRESTStorageProvider{ storageProvider := corerest.LegacyRESTStorageProvider{
StorageFactory: apiserverCfg.ExtraConfig.StorageFactory, GenericLegacyRESTStorageProvider: corerest.GenericLegacyRESTStorageProvider{
StorageFactory: apiserverCfg.ExtraConfig.StorageFactory,
EventTTL: apiserverCfg.ExtraConfig.EventTTL,
LoopbackClientConfig: apiserverCfg.GenericConfig.LoopbackClientConfig,
Informers: apiserverCfg.ExtraConfig.VersionedInformers,
},
ProxyTransport: apiserverCfg.ExtraConfig.ProxyTransport, ProxyTransport: apiserverCfg.ExtraConfig.ProxyTransport,
KubeletClientConfig: apiserverCfg.ExtraConfig.KubeletClientConfig, KubeletClientConfig: apiserverCfg.ExtraConfig.KubeletClientConfig,
EventTTL: apiserverCfg.ExtraConfig.EventTTL,
ServiceIPRange: apiserverCfg.ExtraConfig.ServiceIPRange, ServiceIPRange: apiserverCfg.ExtraConfig.ServiceIPRange,
ServiceNodePortRange: apiserverCfg.ExtraConfig.ServiceNodePortRange, ServiceNodePortRange: apiserverCfg.ExtraConfig.ServiceNodePortRange,
LoopbackClientConfig: apiserverCfg.GenericConfig.LoopbackClientConfig,
Informers: apiserverCfg.ExtraConfig.VersionedInformers,
} }
_, apiGroupInfo, err := storageProvider.NewLegacyRESTStorage(serverstorage.NewResourceConfig(), apiserverCfg.GenericConfig.RESTOptionsGetter) _, apiGroupInfo, err := storageProvider.NewLegacyRESTStorage(serverstorage.NewResourceConfig(), apiserverCfg.GenericConfig.RESTOptionsGetter)

View File

@ -67,20 +67,12 @@ import (
"k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/kubernetes/pkg/serviceaccount"
) )
// LegacyRESTStorageProvider provides information needed to build RESTStorage for core, but // GenericLegacyRESTStorageProvider provides information needed to build RESTStorage
// does NOT implement the "normal" RESTStorageProvider (yet!) // for generic resources in core, but does NOT implement the "normal"
type LegacyRESTStorageProvider struct { // RESTStorageProvider (yet!)
type GenericLegacyRESTStorageProvider struct {
StorageFactory serverstorage.StorageFactory StorageFactory serverstorage.StorageFactory
// Used for custom proxy dialing, and proxy TLS options EventTTL time.Duration
ProxyTransport http.RoundTripper
KubeletClientConfig kubeletclient.KubeletClientConfig
EventTTL time.Duration
// ServiceIPRange is used to build cluster IPs for discovery.
ServiceIPRange net.IPNet
// allocates ips for secondary service cidr in dual stack clusters
SecondaryServiceIPRange net.IPNet
ServiceNodePortRange utilnet.PortRange
ServiceAccountIssuer serviceaccount.TokenGenerator ServiceAccountIssuer serviceaccount.TokenGenerator
ServiceAccountMaxExpiration time.Duration ServiceAccountMaxExpiration time.Duration
@ -92,16 +84,24 @@ type LegacyRESTStorageProvider struct {
Informers informers.SharedInformerFactory Informers informers.SharedInformerFactory
} }
// LegacyRESTStorage returns stateful information about particular instances of REST storage to // LegacyRESTStorageProvider provides information needed to build RESTStorage for core, but
// master.go for wiring controllers. // does NOT implement the "normal" RESTStorageProvider (yet!)
// TODO remove this by running the controller as a poststarthook type LegacyRESTStorageProvider struct {
type LegacyRESTStorage struct { GenericLegacyRESTStorageProvider
ServiceClusterIPAllocator rangeallocation.RangeRegistry
SecondaryServiceClusterIPAllocator rangeallocation.RangeRegistry // Used for custom proxy dialing, and proxy TLS options
ServiceNodePortAllocator rangeallocation.RangeRegistry ProxyTransport http.RoundTripper
KubeletClientConfig kubeletclient.KubeletClientConfig
// ServiceIPRange is used to build cluster IPs for discovery.
ServiceIPRange net.IPNet
// allocates ips for secondary service cidr in dual stack clusters
SecondaryServiceIPRange net.IPNet
ServiceNodePortRange utilnet.PortRange
} }
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (kubernetesservice.RangeRegistries, genericapiserver.APIGroupInfo, error) { func (c GenericLegacyRESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, error) {
apiGroupInfo := genericapiserver.APIGroupInfo{ apiGroupInfo := genericapiserver.APIGroupInfo{
PrioritizedVersions: legacyscheme.Scheme.PrioritizedVersionsForGroup(""), PrioritizedVersions: legacyscheme.Scheme.PrioritizedVersionsForGroup(""),
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{}, VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
@ -110,34 +110,98 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
NegotiatedSerializer: legacyscheme.Codecs, NegotiatedSerializer: legacyscheme.Codecs,
} }
eventStorage, err := eventstore.NewREST(restOptionsGetter, uint64(c.EventTTL.Seconds()))
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
resourceQuotaStorage, resourceQuotaStatusStorage, err := resourcequotastore.NewREST(restOptionsGetter)
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
secretStorage, err := secretstore.NewREST(restOptionsGetter)
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
configMapStorage, err := configmapstore.NewREST(restOptionsGetter)
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
namespaceStorage, namespaceStatusStorage, namespaceFinalizeStorage, err := namespacestore.NewREST(restOptionsGetter)
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
var serviceAccountStorage *serviceaccountstore.REST
if c.ServiceAccountIssuer != nil {
serviceAccountStorage, err = serviceaccountstore.NewREST(restOptionsGetter, c.ServiceAccountIssuer, c.APIAudiences, c.ServiceAccountMaxExpiration, nil, secretStorage.Store, c.ExtendExpiration)
} else {
serviceAccountStorage, err = serviceaccountstore.NewREST(restOptionsGetter, nil, nil, 0, nil, nil, false)
}
if err != nil {
return genericapiserver.APIGroupInfo{}, err
}
storage := map[string]rest.Storage{}
if resource := "events"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = eventStorage
}
if resource := "resourcequotas"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = resourceQuotaStorage
storage[resource+"/status"] = resourceQuotaStatusStorage
}
if resource := "namespaces"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = namespaceStorage
storage[resource+"/status"] = namespaceStatusStorage
storage[resource+"/finalize"] = namespaceFinalizeStorage
}
if resource := "secrets"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = secretStorage
}
if resource := "serviceaccounts"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = serviceAccountStorage
if serviceAccountStorage.Token != nil {
storage[resource+"/token"] = serviceAccountStorage.Token
}
}
if resource := "configmaps"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = configMapStorage
}
if len(storage) > 0 {
apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage
}
return apiGroupInfo, nil
}
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (kubernetesservice.RangeRegistries, genericapiserver.APIGroupInfo, error) {
apiGroupInfo, err := c.GenericLegacyRESTStorageProvider.NewRESTStorage(apiResourceConfigSource, restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
podDisruptionClient, err := policyclient.NewForConfig(c.LoopbackClientConfig) podDisruptionClient, err := policyclient.NewForConfig(c.LoopbackClientConfig)
if err != nil { if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
restStorage := kubernetesservice.RangeRegistries{}
podTemplateStorage, err := podtemplatestore.NewREST(restOptionsGetter) podTemplateStorage, err := podtemplatestore.NewREST(restOptionsGetter)
if err != nil { if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
eventStorage, err := eventstore.NewREST(restOptionsGetter, uint64(c.EventTTL.Seconds()))
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
limitRangeStorage, err := limitrangestore.NewREST(restOptionsGetter) limitRangeStorage, err := limitrangestore.NewREST(restOptionsGetter)
if err != nil { if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
resourceQuotaStorage, resourceQuotaStatusStorage, err := resourcequotastore.NewREST(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
secretStorage, err := secretstore.NewREST(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
persistentVolumeStorage, persistentVolumeStatusStorage, err := pvstore.NewREST(restOptionsGetter) persistentVolumeStorage, persistentVolumeStatusStorage, err := pvstore.NewREST(restOptionsGetter)
if err != nil { if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
@ -146,15 +210,6 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
if err != nil { if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
configMapStorage, err := configmapstore.NewREST(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
namespaceStorage, namespaceStatusStorage, namespaceFinalizeStorage, err := namespacestore.NewREST(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
endpointsStorage, err := endpointsstore.NewREST(restOptionsGetter) endpointsStorage, err := endpointsstore.NewREST(restOptionsGetter)
if err != nil { if err != nil {
@ -176,15 +231,7 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
var serviceAccountStorage *serviceaccountstore.REST var rangeRegistries kubernetesservice.RangeRegistries
if c.ServiceAccountIssuer != nil {
serviceAccountStorage, err = serviceaccountstore.NewREST(restOptionsGetter, c.ServiceAccountIssuer, c.APIAudiences, c.ServiceAccountMaxExpiration, podStorage.Pod.Store, secretStorage.Store, c.ExtendExpiration)
} else {
serviceAccountStorage, err = serviceaccountstore.NewREST(restOptionsGetter, nil, nil, 0, nil, nil, false)
}
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
var serviceClusterIPRegistry rangeallocation.RangeRegistry var serviceClusterIPRegistry rangeallocation.RangeRegistry
serviceClusterIPRange := c.ServiceIPRange serviceClusterIPRange := c.ServiceIPRange
@ -225,7 +272,7 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
} }
serviceClusterIPAllocator.EnableMetrics() serviceClusterIPAllocator.EnableMetrics()
restStorage.ServiceClusterIPRegistry = serviceClusterIPRegistry rangeRegistries.ServiceClusterIPRegistry = serviceClusterIPRegistry
// allocator for secondary service ip range // allocator for secondary service ip range
if c.SecondaryServiceIPRange.IP != nil { if c.SecondaryServiceIPRange.IP != nil {
@ -256,7 +303,7 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
} }
} }
secondaryServiceClusterIPAllocator.EnableMetrics() secondaryServiceClusterIPAllocator.EnableMetrics()
restStorage.SecondaryServiceClusterIPRegistry = secondaryServiceClusterIPRegistry rangeRegistries.SecondaryServiceClusterIPRegistry = secondaryServiceClusterIPRegistry
} }
var serviceNodePortRegistry rangeallocation.RangeRegistry var serviceNodePortRegistry rangeallocation.RangeRegistry
@ -274,12 +321,7 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, fmt.Errorf("cannot create cluster port allocator: %v", err) return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, fmt.Errorf("cannot create cluster port allocator: %v", err)
} }
serviceNodePortAllocator.EnableMetrics() serviceNodePortAllocator.EnableMetrics()
restStorage.ServiceNodePortRegistry = serviceNodePortRegistry rangeRegistries.ServiceNodePortRegistry = serviceNodePortRegistry
controllerStorage, err := controllerstore.NewStorage(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
serviceIPAllocators := map[api.IPFamily]ipallocator.Interface{ serviceIPAllocators := map[api.IPFamily]ipallocator.Interface{
serviceClusterIPAllocator.IPFamily(): serviceClusterIPAllocator, serviceClusterIPAllocator.IPFamily(): serviceClusterIPAllocator,
@ -300,7 +342,20 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
} }
storage := map[string]rest.Storage{} storage := apiGroupInfo.VersionedResourcesStorageMap["v1"]
if storage == nil {
storage = map[string]rest.Storage{}
}
// potentially override the generic serviceaccount storage with one that supports pods
var serviceAccountStorage *serviceaccountstore.REST
if c.ServiceAccountIssuer != nil {
serviceAccountStorage, err = serviceaccountstore.NewREST(restOptionsGetter, c.ServiceAccountIssuer, c.APIAudiences, c.ServiceAccountMaxExpiration, podStorage.Pod.Store, storage["secrets"].(rest.Getter), c.ExtendExpiration)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
}
if resource := "pods"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "pods"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = podStorage.Pod storage[resource] = podStorage.Pod
storage[resource+"/attach"] = podStorage.Attach storage[resource+"/attach"] = podStorage.Attach
@ -314,7 +369,6 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
storage[resource+"/eviction"] = podStorage.Eviction storage[resource+"/eviction"] = podStorage.Eviction
} }
storage[resource+"/ephemeralcontainers"] = podStorage.EphemeralContainers storage[resource+"/ephemeralcontainers"] = podStorage.EphemeralContainers
} }
if resource := "bindings"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "bindings"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = podStorage.LegacyBinding storage[resource] = podStorage.LegacyBinding
@ -325,6 +379,11 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
} }
if resource := "replicationcontrollers"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "replicationcontrollers"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
controllerStorage, err := controllerstore.NewStorage(restOptionsGetter)
if err != nil {
return kubernetesservice.RangeRegistries{}, genericapiserver.APIGroupInfo{}, err
}
storage[resource] = controllerStorage.Controller storage[resource] = controllerStorage.Controller
storage[resource+"/status"] = controllerStorage.Status storage[resource+"/status"] = controllerStorage.Status
if legacyscheme.Scheme.IsVersionRegistered(schema.GroupVersion{Group: "autoscaling", Version: "v1"}) { if legacyscheme.Scheme.IsVersionRegistered(schema.GroupVersion{Group: "autoscaling", Version: "v1"}) {
@ -332,6 +391,20 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
} }
} }
// potentially override generic storage for service account (with pod support)
if resource := "serviceaccounts"; serviceAccountStorage != nil && apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
// don't leak go routines
storage[resource].Destroy()
if storage[resource+"/token"] != nil {
storage[resource+"/token"].Destroy()
}
storage[resource] = serviceAccountStorage
if serviceAccountStorage.Token != nil {
storage[resource+"/token"] = serviceAccountStorage.Token
}
}
if resource := "services"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "services"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = serviceRESTStorage storage[resource] = serviceRESTStorage
storage[resource+"/proxy"] = serviceRESTProxy storage[resource+"/proxy"] = serviceRESTProxy
@ -348,36 +421,10 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
storage[resource+"/status"] = nodeStorage.Status storage[resource+"/status"] = nodeStorage.Status
} }
if resource := "events"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = eventStorage
}
if resource := "limitranges"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "limitranges"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = limitRangeStorage storage[resource] = limitRangeStorage
} }
if resource := "resourcequotas"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = resourceQuotaStorage
storage[resource+"/status"] = resourceQuotaStatusStorage
}
if resource := "namespaces"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = namespaceStorage
storage[resource+"/status"] = namespaceStatusStorage
storage[resource+"/finalize"] = namespaceFinalizeStorage
}
if resource := "secrets"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = secretStorage
}
if resource := "serviceaccounts"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = serviceAccountStorage
if serviceAccountStorage.Token != nil {
storage[resource+"/token"] = serviceAccountStorage.Token
}
}
if resource := "persistentvolumes"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "persistentvolumes"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = persistentVolumeStorage storage[resource] = persistentVolumeStorage
storage[resource+"/status"] = persistentVolumeStatusStorage storage[resource+"/status"] = persistentVolumeStatusStorage
@ -388,10 +435,6 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
storage[resource+"/status"] = persistentVolumeClaimStatusStorage storage[resource+"/status"] = persistentVolumeClaimStatusStorage
} }
if resource := "configmaps"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = configMapStorage
}
if resource := "componentstatuses"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) { if resource := "componentstatuses"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
storage[resource] = componentstatus.NewStorage(componentStatusStorage{c.StorageFactory}.serversToValidate) storage[resource] = componentstatus.NewStorage(componentStatusStorage{c.StorageFactory}.serversToValidate)
} }
@ -400,7 +443,7 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource
apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage
} }
return restStorage, apiGroupInfo, nil return rangeRegistries, apiGroupInfo, nil
} }
func (p LegacyRESTStorageProvider) GroupName() string { func (p LegacyRESTStorageProvider) GroupName() string {