From 132fbf4192dd6889dfdcdda33042e55c8de05a5b Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 16 Feb 2022 14:19:29 -0500 Subject: [PATCH] convert rest storage to per-resource --- .../rest/storage_apiserver.go | 33 ++--- .../apiserverinternal/rest/storage.go | 22 ++-- pkg/registry/apps/rest/storage_apps.go | 72 ++++++----- .../rest/storage_authentication.go | 11 +- .../rest/storage_authorization.go | 24 +++- .../autoscaling/rest/storage_autoscaling.go | 118 +++++++++--------- pkg/registry/batch/rest/storage_batch.go | 68 +++++----- .../certificates/rest/storage_certificates.go | 29 ++--- .../coordination/rest/storage_coordination.go | 26 ++-- 9 files changed, 221 insertions(+), 182 deletions(-) diff --git a/pkg/registry/admissionregistration/rest/storage_apiserver.go b/pkg/registry/admissionregistration/rest/storage_apiserver.go index 7b75ecb2817..2c8b6eac55c 100644 --- a/pkg/registry/admissionregistration/rest/storage_apiserver.go +++ b/pkg/registry/admissionregistration/rest/storage_apiserver.go @@ -35,33 +35,36 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(admissionregistrationv1.SchemeGroupVersion) { - if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1.SchemeGroupVersion.Version] = storageMap - } + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[admissionregistrationv1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil } func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} + // validatingwebhookconfigurations - validatingStorage, err := validatingwebhookconfigurationstorage.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "validatingwebhookconfigurations"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1.SchemeGroupVersion.WithResource(resource)) { + validatingStorage, err := validatingwebhookconfigurationstorage.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = validatingStorage } - storage["validatingwebhookconfigurations"] = validatingStorage // mutatingwebhookconfigurations - mutatingStorage, err := mutatingwebhookconfigurationstorage.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "mutatingwebhookconfigurations"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1.SchemeGroupVersion.WithResource(resource)) { + mutatingStorage, err := mutatingwebhookconfigurationstorage.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = mutatingStorage } - storage["mutatingwebhookconfigurations"] = mutatingStorage - return storage, err + return storage, nil } func (p RESTStorageProvider) GroupName() string { diff --git a/pkg/registry/apiserverinternal/rest/storage.go b/pkg/registry/apiserverinternal/rest/storage.go index e69e8cc56c1..f749e37eaf0 100644 --- a/pkg/registry/apiserverinternal/rest/storage.go +++ b/pkg/registry/apiserverinternal/rest/storage.go @@ -34,24 +34,26 @@ type StorageProvider struct{} func (p StorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool, error) { apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiserverinternal.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) - if apiResourceConfigSource.VersionEnabled(apiserverv1alpha1.SchemeGroupVersion) { - storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter) - if err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } + if storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { apiGroupInfo.VersionedResourcesStorageMap[apiserverv1alpha1.SchemeGroupVersion.Version] = storageMap } + return apiGroupInfo, true, nil } func (p StorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - s, status, err := storageversionstorage.NewREST(restOptionsGetter) - if err != nil { - return nil, err + + if resource := "storageversions"; apiResourceConfigSource.ResourceEnabled(apiserverv1alpha1.SchemeGroupVersion.WithResource(resource)) { + s, status, err := storageversionstorage.NewREST(restOptionsGetter) + if err != nil { + return nil, err + } + storage[resource] = s + storage[resource+"/status"] = status } - storage["storageversions"] = s - storage["storageversions/status"] = status return storage, nil } diff --git a/pkg/registry/apps/rest/storage_apps.go b/pkg/registry/apps/rest/storage_apps.go index 5d800a8733d..d4046942f44 100644 --- a/pkg/registry/apps/rest/storage_apps.go +++ b/pkg/registry/apps/rest/storage_apps.go @@ -40,11 +40,9 @@ func (p StorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.AP // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(appsapiv1.SchemeGroupVersion) { - storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter) - if err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { apiGroupInfo.VersionedResourcesStorageMap[appsapiv1.SchemeGroupVersion.Version] = storageMap } @@ -55,46 +53,56 @@ func (p StorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIReso storage := map[string]rest.Storage{} // deployments - deploymentStorage, err := deploymentstore.NewStorage(restOptionsGetter) - if err != nil { - return storage, err + if resource := "deployments"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) { + deploymentStorage, err := deploymentstore.NewStorage(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = deploymentStorage.Deployment + storage[resource+"/status"] = deploymentStorage.Status + storage[resource+"/scale"] = deploymentStorage.Scale } - storage["deployments"] = deploymentStorage.Deployment - storage["deployments/status"] = deploymentStorage.Status - storage["deployments/scale"] = deploymentStorage.Scale // statefulsets - statefulSetStorage, err := statefulsetstore.NewStorage(restOptionsGetter) - if err != nil { - return storage, err + if resource := "statefulsets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) { + statefulSetStorage, err := statefulsetstore.NewStorage(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = statefulSetStorage.StatefulSet + storage[resource+"/status"] = statefulSetStorage.Status + storage[resource+"/scale"] = statefulSetStorage.Scale } - storage["statefulsets"] = statefulSetStorage.StatefulSet - storage["statefulsets/status"] = statefulSetStorage.Status - storage["statefulsets/scale"] = statefulSetStorage.Scale // daemonsets - daemonSetStorage, daemonSetStatusStorage, err := daemonsetstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "daemonsets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) { + daemonSetStorage, daemonSetStatusStorage, err := daemonsetstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = daemonSetStorage + storage[resource+"/status"] = daemonSetStatusStorage } - storage["daemonsets"] = daemonSetStorage - storage["daemonsets/status"] = daemonSetStatusStorage // replicasets - replicaSetStorage, err := replicasetstore.NewStorage(restOptionsGetter) - if err != nil { - return storage, err + if resource := "replicasets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) { + replicaSetStorage, err := replicasetstore.NewStorage(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = replicaSetStorage.ReplicaSet + storage[resource+"/status"] = replicaSetStorage.Status + storage[resource+"/scale"] = replicaSetStorage.Scale } - storage["replicasets"] = replicaSetStorage.ReplicaSet - storage["replicasets/status"] = replicaSetStorage.Status - storage["replicasets/scale"] = replicaSetStorage.Scale // controllerrevisions - historyStorage, err := controllerrevisionsstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "controllerrevisions"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) { + historyStorage, err := controllerrevisionsstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = historyStorage } - storage["controllerrevisions"] = historyStorage return storage, nil } diff --git a/pkg/registry/authentication/rest/storage_authentication.go b/pkg/registry/authentication/rest/storage_authentication.go index f79a5f218e3..0152d5d766c 100644 --- a/pkg/registry/authentication/rest/storage_authentication.go +++ b/pkg/registry/authentication/rest/storage_authentication.go @@ -43,8 +43,8 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(authenticationv1.SchemeGroupVersion) { - apiGroupInfo.VersionedResourcesStorageMap[authenticationv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) + if storageMap := p.v1Storage(apiResourceConfigSource, restOptionsGetter); len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[authenticationv1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil @@ -52,9 +52,12 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { storage := map[string]rest.Storage{} + // tokenreviews - tokenReviewStorage := tokenreview.NewREST(p.Authenticator, p.APIAudiences) - storage["tokenreviews"] = tokenReviewStorage + if resource := "tokenreviews"; apiResourceConfigSource.ResourceEnabled(authenticationv1.SchemeGroupVersion.WithResource(resource)) { + tokenReviewStorage := tokenreview.NewREST(p.Authenticator, p.APIAudiences) + storage[resource] = tokenReviewStorage + } return storage } diff --git a/pkg/registry/authorization/rest/storage_authorization.go b/pkg/registry/authorization/rest/storage_authorization.go index c424deaf9ef..77b9eb2faef 100644 --- a/pkg/registry/authorization/rest/storage_authorization.go +++ b/pkg/registry/authorization/rest/storage_authorization.go @@ -45,8 +45,8 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(authorizationv1.SchemeGroupVersion) { - apiGroupInfo.VersionedResourcesStorageMap[authorizationv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter) + if storageMap := p.v1Storage(apiResourceConfigSource, restOptionsGetter); len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[authorizationv1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil @@ -54,14 +54,26 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { storage := map[string]rest.Storage{} + // subjectaccessreviews - storage["subjectaccessreviews"] = subjectaccessreview.NewREST(p.Authorizer) + if resource := "subjectaccessreviews"; apiResourceConfigSource.ResourceEnabled(authorizationv1.SchemeGroupVersion.WithResource(resource)) { + storage[resource] = subjectaccessreview.NewREST(p.Authorizer) + } + // selfsubjectaccessreviews - storage["selfsubjectaccessreviews"] = selfsubjectaccessreview.NewREST(p.Authorizer) + if resource := "selfsubjectaccessreviews"; apiResourceConfigSource.ResourceEnabled(authorizationv1.SchemeGroupVersion.WithResource(resource)) { + storage[resource] = selfsubjectaccessreview.NewREST(p.Authorizer) + } + // localsubjectaccessreviews - storage["localsubjectaccessreviews"] = localsubjectaccessreview.NewREST(p.Authorizer) + if resource := "localsubjectaccessreviews"; apiResourceConfigSource.ResourceEnabled(authorizationv1.SchemeGroupVersion.WithResource(resource)) { + storage[resource] = localsubjectaccessreview.NewREST(p.Authorizer) + } + // selfsubjectrulesreviews - storage["selfsubjectrulesreviews"] = selfsubjectrulesreview.NewREST(p.RuleResolver) + if resource := "selfsubjectrulesreviews"; apiResourceConfigSource.ResourceEnabled(authorizationv1.SchemeGroupVersion.WithResource(resource)) { + storage[resource] = selfsubjectrulesreview.NewREST(p.RuleResolver) + } return storage } diff --git a/pkg/registry/autoscaling/rest/storage_autoscaling.go b/pkg/registry/autoscaling/rest/storage_autoscaling.go index 480324d6b01..a610e34f283 100644 --- a/pkg/registry/autoscaling/rest/storage_autoscaling.go +++ b/pkg/registry/autoscaling/rest/storage_autoscaling.go @@ -37,33 +37,28 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(autoscalingapiv2beta2.SchemeGroupVersion) { - if storageMap, err := p.v2beta2Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta2.SchemeGroupVersion.Version] = storageMap - } + if storageMap, err := p.v2beta2Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta2.SchemeGroupVersion.Version] = storageMap } - if apiResourceConfigSource.VersionEnabled(autoscalingapiv2.SchemeGroupVersion) { - if storageMap, err := p.v2Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2.SchemeGroupVersion.Version] = storageMap - } + + if storageMap, err := p.v2Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2.SchemeGroupVersion.Version] = storageMap } - if apiResourceConfigSource.VersionEnabled(autoscalingapiv2beta1.SchemeGroupVersion) { - if storageMap, err := p.v2beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta1.SchemeGroupVersion.Version] = storageMap - } + + if storageMap, err := p.v2beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv2beta1.SchemeGroupVersion.Version] = storageMap } - if apiResourceConfigSource.VersionEnabled(autoscalingapiv1.SchemeGroupVersion) { - if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv1.SchemeGroupVersion.Version] = storageMap - } + + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil @@ -71,54 +66,65 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // horizontalpodautoscalers - hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["horizontalpodautoscalers"] = hpaStorage - storage["horizontalpodautoscalers/status"] = hpaStatusStorage - return storage, err + // horizontalpodautoscalers + if resource := "horizontalpodautoscalers"; apiResourceConfigSource.ResourceEnabled(autoscalingapiv1.SchemeGroupVersion.WithResource(resource)) { + hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = hpaStorage + storage[resource+"/status"] = hpaStatusStorage + } + + return storage, nil } func (p RESTStorageProvider) v2beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // horizontalpodautoscalers - hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["horizontalpodautoscalers"] = hpaStorage - storage["horizontalpodautoscalers/status"] = hpaStatusStorage - return storage, err + // horizontalpodautoscalers + if resource := "horizontalpodautoscalers"; apiResourceConfigSource.ResourceEnabled(autoscalingapiv2beta1.SchemeGroupVersion.WithResource(resource)) { + hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = hpaStorage + storage[resource+"/status"] = hpaStatusStorage + } + + return storage, nil } func (p RESTStorageProvider) v2beta2Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // horizontalpodautoscalers - hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["horizontalpodautoscalers"] = hpaStorage - storage["horizontalpodautoscalers/status"] = hpaStatusStorage - return storage, err + // horizontalpodautoscalers + if resource := "horizontalpodautoscalers"; apiResourceConfigSource.ResourceEnabled(autoscalingapiv2beta2.SchemeGroupVersion.WithResource(resource)) { + hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = hpaStorage + storage[resource+"/status"] = hpaStatusStorage + } + return storage, nil } func (p RESTStorageProvider) v2Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // horizontalpodautoscalers - hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["horizontalpodautoscalers"] = hpaStorage - storage["horizontalpodautoscalers/status"] = hpaStatusStorage - return storage, err + // horizontalpodautoscalers + if resource := "horizontalpodautoscalers"; apiResourceConfigSource.ResourceEnabled(autoscalingapiv2.SchemeGroupVersion.WithResource(resource)) { + hpaStorage, hpaStatusStorage, err := horizontalpodautoscalerstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = hpaStorage + storage[resource+"/status"] = hpaStatusStorage + } + + return storage, nil } func (p RESTStorageProvider) GroupName() string { diff --git a/pkg/registry/batch/rest/storage_batch.go b/pkg/registry/batch/rest/storage_batch.go index 638e324f000..a1e2e0c173b 100644 --- a/pkg/registry/batch/rest/storage_batch.go +++ b/pkg/registry/batch/rest/storage_batch.go @@ -36,19 +36,16 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(batchapiv1.SchemeGroupVersion) { - if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[batchapiv1.SchemeGroupVersion.Version] = storageMap - } + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[batchapiv1.SchemeGroupVersion.Version] = storageMap } - if apiResourceConfigSource.VersionEnabled(batchapiv1beta1.SchemeGroupVersion) { - if storageMap, err := p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[batchapiv1beta1.SchemeGroupVersion.Version] = storageMap - } + + if storageMap, err := p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[batchapiv1beta1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil @@ -56,36 +53,43 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} + // jobs - jobsStorage, jobsStatusStorage, err := jobstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "jobs"; apiResourceConfigSource.ResourceEnabled(batchapiv1.SchemeGroupVersion.WithResource(resource)) { + jobsStorage, jobsStatusStorage, err := jobstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = jobsStorage + storage[resource+"/status"] = jobsStatusStorage } - storage["jobs"] = jobsStorage - storage["jobs/status"] = jobsStatusStorage // cronjobs - cronJobsStorage, cronJobsStatusStorage, err := cronjobstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err + if resource := "cronjobs"; apiResourceConfigSource.ResourceEnabled(batchapiv1.SchemeGroupVersion.WithResource(resource)) { + cronJobsStorage, cronJobsStatusStorage, err := cronjobstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = cronJobsStorage + storage[resource+"/status"] = cronJobsStatusStorage } - storage["cronjobs"] = cronJobsStorage - storage["cronjobs/status"] = cronJobsStatusStorage - - return storage, err + return storage, nil } func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // cronjobs - cronJobsStorage, cronJobsStatusStorage, err := cronjobstore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["cronjobs"] = cronJobsStorage - storage["cronjobs/status"] = cronJobsStatusStorage - return storage, err + // cronjobs + if resource := "cronjobs"; apiResourceConfigSource.ResourceEnabled(batchapiv1beta1.SchemeGroupVersion.WithResource(resource)) { + cronJobsStorage, cronJobsStatusStorage, err := cronjobstore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = cronJobsStorage + storage[resource+"/status"] = cronJobsStatusStorage + } + + return storage, nil } func (p RESTStorageProvider) GroupName() string { diff --git a/pkg/registry/certificates/rest/storage_certificates.go b/pkg/registry/certificates/rest/storage_certificates.go index 18be6d6ea26..ee80be7c26f 100644 --- a/pkg/registry/certificates/rest/storage_certificates.go +++ b/pkg/registry/certificates/rest/storage_certificates.go @@ -34,11 +34,9 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(certificatesapiv1.SchemeGroupVersion) { - storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter) - if err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { apiGroupInfo.VersionedResourcesStorageMap[certificatesapiv1.SchemeGroupVersion.Version] = storageMap } @@ -47,16 +45,19 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // certificatesigningrequests - csrStorage, csrStatusStorage, csrApprovalStorage, err := certificatestore.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["certificatesigningrequests"] = csrStorage - storage["certificatesigningrequests/status"] = csrStatusStorage - storage["certificatesigningrequests/approval"] = csrApprovalStorage - return storage, err + // certificatesigningrequests + if resource := "certificatesigningrequests"; apiResourceConfigSource.ResourceEnabled(certificatesapiv1.SchemeGroupVersion.WithResource(resource)) { + csrStorage, csrStatusStorage, csrApprovalStorage, err := certificatestore.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = csrStorage + storage[resource+"/status"] = csrStatusStorage + storage[resource+"/approval"] = csrApprovalStorage + } + + return storage, nil } func (p RESTStorageProvider) GroupName() string { diff --git a/pkg/registry/coordination/rest/storage_coordination.go b/pkg/registry/coordination/rest/storage_coordination.go index 693168b5ba7..e1bfc3e67fd 100644 --- a/pkg/registry/coordination/rest/storage_coordination.go +++ b/pkg/registry/coordination/rest/storage_coordination.go @@ -34,26 +34,26 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag // If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. // TODO refactor the plumbing to provide the information in the APIGroupInfo - if apiResourceConfigSource.VersionEnabled(coordinationv1.SchemeGroupVersion) { - if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { - return genericapiserver.APIGroupInfo{}, false, err - } else { - apiGroupInfo.VersionedResourcesStorageMap[coordinationv1.SchemeGroupVersion.Version] = storageMap - } + if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { + return genericapiserver.APIGroupInfo{}, false, err + } else if len(storageMap) > 0 { + apiGroupInfo.VersionedResourcesStorageMap[coordinationv1.SchemeGroupVersion.Version] = storageMap } return apiGroupInfo, true, nil } func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { storage := map[string]rest.Storage{} - // leases - leaseStorage, err := leasestorage.NewREST(restOptionsGetter) - if err != nil { - return storage, err - } - storage["leases"] = leaseStorage - return storage, err + // leases + if resource := "leases"; apiResourceConfigSource.ResourceEnabled(coordinationv1.SchemeGroupVersion.WithResource(resource)) { + leaseStorage, err := leasestorage.NewREST(restOptionsGetter) + if err != nil { + return storage, err + } + storage[resource] = leaseStorage + } + return storage, nil } func (p RESTStorageProvider) GroupName() string {