migrate more rest handlers to select by resource enablement
This commit is contained in:
@@ -27,6 +27,7 @@ import (
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
"k8s.io/apiserver/pkg/authentication/authenticator"
|
||||
@@ -102,7 +103,7 @@ type LegacyRESTStorage struct {
|
||||
ServiceNodePortAllocator rangeallocation.RangeRegistry
|
||||
}
|
||||
|
||||
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(restOptionsGetter generic.RESTOptionsGetter) (LegacyRESTStorage, genericapiserver.APIGroupInfo, error) {
|
||||
func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (LegacyRESTStorage, genericapiserver.APIGroupInfo, error) {
|
||||
apiGroupInfo := genericapiserver.APIGroupInfo{
|
||||
PrioritizedVersions: legacyscheme.Scheme.PrioritizedVersionsForGroup(""),
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
|
||||
@@ -273,63 +274,107 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(restOptionsGetter generi
|
||||
return LegacyRESTStorage{}, genericapiserver.APIGroupInfo{}, err
|
||||
}
|
||||
|
||||
restStorageMap := map[string]rest.Storage{
|
||||
"pods": podStorage.Pod,
|
||||
"pods/attach": podStorage.Attach,
|
||||
"pods/status": podStorage.Status,
|
||||
"pods/log": podStorage.Log,
|
||||
"pods/exec": podStorage.Exec,
|
||||
"pods/portforward": podStorage.PortForward,
|
||||
"pods/proxy": podStorage.Proxy,
|
||||
"pods/binding": podStorage.Binding,
|
||||
"bindings": podStorage.LegacyBinding,
|
||||
storage := map[string]rest.Storage{}
|
||||
if resource := "pods"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = podStorage.Pod
|
||||
storage[resource+"/attach"] = podStorage.Attach
|
||||
storage[resource+"/status"] = podStorage.Status
|
||||
storage[resource+"/log"] = podStorage.Log
|
||||
storage[resource+"/exec"] = podStorage.Exec
|
||||
storage[resource+"/portforward"] = podStorage.PortForward
|
||||
storage[resource+"/proxy"] = podStorage.Proxy
|
||||
storage[resource+"/binding"] = podStorage.Binding
|
||||
if podStorage.Eviction != nil {
|
||||
storage[resource+"/eviction"] = podStorage.Eviction
|
||||
}
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.EphemeralContainers) {
|
||||
storage[resource+"/ephemeralcontainers"] = podStorage.EphemeralContainers
|
||||
}
|
||||
|
||||
"podTemplates": podTemplateStorage,
|
||||
|
||||
"replicationControllers": controllerStorage.Controller,
|
||||
"replicationControllers/status": controllerStorage.Status,
|
||||
|
||||
"services": serviceRESTStorage,
|
||||
"services/proxy": serviceRESTProxy,
|
||||
"services/status": serviceStatusStorage,
|
||||
|
||||
"endpoints": endpointsStorage,
|
||||
|
||||
"nodes": nodeStorage.Node,
|
||||
"nodes/status": nodeStorage.Status,
|
||||
"nodes/proxy": nodeStorage.Proxy,
|
||||
|
||||
"events": eventStorage,
|
||||
|
||||
"limitRanges": limitRangeStorage,
|
||||
"resourceQuotas": resourceQuotaStorage,
|
||||
"resourceQuotas/status": resourceQuotaStatusStorage,
|
||||
"namespaces": namespaceStorage,
|
||||
"namespaces/status": namespaceStatusStorage,
|
||||
"namespaces/finalize": namespaceFinalizeStorage,
|
||||
"secrets": secretStorage,
|
||||
"serviceAccounts": serviceAccountStorage,
|
||||
"persistentVolumes": persistentVolumeStorage,
|
||||
"persistentVolumes/status": persistentVolumeStatusStorage,
|
||||
"persistentVolumeClaims": persistentVolumeClaimStorage,
|
||||
"persistentVolumeClaims/status": persistentVolumeClaimStatusStorage,
|
||||
"configMaps": configMapStorage,
|
||||
|
||||
"componentStatuses": componentstatus.NewStorage(componentStatusStorage{c.StorageFactory}.serversToValidate),
|
||||
}
|
||||
if legacyscheme.Scheme.IsVersionRegistered(schema.GroupVersion{Group: "autoscaling", Version: "v1"}) {
|
||||
restStorageMap["replicationControllers/scale"] = controllerStorage.Scale
|
||||
if resource := "bindings"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = podStorage.LegacyBinding
|
||||
}
|
||||
if podStorage.Eviction != nil {
|
||||
restStorageMap["pods/eviction"] = podStorage.Eviction
|
||||
|
||||
if resource := "podtemplates"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = podTemplateStorage
|
||||
}
|
||||
if serviceAccountStorage.Token != nil {
|
||||
restStorageMap["serviceaccounts/token"] = serviceAccountStorage.Token
|
||||
|
||||
if resource := "replicationcontrollers"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = controllerStorage.Controller
|
||||
storage[resource+"/status"] = controllerStorage.Status
|
||||
if legacyscheme.Scheme.IsVersionRegistered(schema.GroupVersion{Group: "autoscaling", Version: "v1"}) {
|
||||
storage[resource+"/scale"] = controllerStorage.Scale
|
||||
}
|
||||
}
|
||||
if utilfeature.DefaultFeatureGate.Enabled(features.EphemeralContainers) {
|
||||
restStorageMap["pods/ephemeralcontainers"] = podStorage.EphemeralContainers
|
||||
|
||||
if resource := "services"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = serviceRESTStorage
|
||||
storage[resource+"/proxy"] = serviceRESTProxy
|
||||
storage[resource+"/status"] = serviceStatusStorage
|
||||
}
|
||||
|
||||
if resource := "endpoints"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = endpointsStorage
|
||||
}
|
||||
|
||||
if resource := "nodes"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = nodeStorage.Node
|
||||
storage[resource+"/proxy"] = nodeStorage.Proxy
|
||||
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)) {
|
||||
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)) {
|
||||
storage[resource] = persistentVolumeStorage
|
||||
storage[resource+"/status"] = persistentVolumeStatusStorage
|
||||
}
|
||||
|
||||
if resource := "persistentvolumeclaims"; apiResourceConfigSource.ResourceEnabled(corev1.SchemeGroupVersion.WithResource(resource)) {
|
||||
storage[resource] = persistentVolumeClaimStorage
|
||||
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)) {
|
||||
storage[resource] = componentstatus.NewStorage(componentStatusStorage{c.StorageFactory}.serversToValidate)
|
||||
}
|
||||
|
||||
if len(storage) > 0 {
|
||||
apiGroupInfo.VersionedResourcesStorageMap["v1"] = storage
|
||||
}
|
||||
apiGroupInfo.VersionedResourcesStorageMap["v1"] = restStorageMap
|
||||
|
||||
return restStorage, apiGroupInfo, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user