k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/pkg/registry/networking/rest/storage_settings.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package rest 18 19 import ( 20 networkingapiv1 "k8s.io/api/networking/v1" 21 networkingapiv1alpha1 "k8s.io/api/networking/v1alpha1" 22 "k8s.io/apiserver/pkg/registry/generic" 23 "k8s.io/apiserver/pkg/registry/rest" 24 genericapiserver "k8s.io/apiserver/pkg/server" 25 serverstorage "k8s.io/apiserver/pkg/server/storage" 26 "k8s.io/kubernetes/pkg/api/legacyscheme" 27 "k8s.io/kubernetes/pkg/apis/networking" 28 ingressstore "k8s.io/kubernetes/pkg/registry/networking/ingress/storage" 29 ingressclassstore "k8s.io/kubernetes/pkg/registry/networking/ingressclass/storage" 30 ipaddressstore "k8s.io/kubernetes/pkg/registry/networking/ipaddress/storage" 31 networkpolicystore "k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage" 32 servicecidrstore "k8s.io/kubernetes/pkg/registry/networking/servicecidr/storage" 33 ) 34 35 type RESTStorageProvider struct{} 36 37 func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, error) { 38 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(networking.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) 39 // 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. 40 // TODO refactor the plumbing to provide the information in the APIGroupInfo 41 42 if storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { 43 return genericapiserver.APIGroupInfo{}, err 44 } else if len(storageMap) > 0 { 45 apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1alpha1.SchemeGroupVersion.Version] = storageMap 46 } 47 48 if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil { 49 return genericapiserver.APIGroupInfo{}, err 50 } else if len(storageMap) > 0 { 51 apiGroupInfo.VersionedResourcesStorageMap[networkingapiv1.SchemeGroupVersion.Version] = storageMap 52 } 53 54 return apiGroupInfo, nil 55 } 56 57 func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { 58 storage := map[string]rest.Storage{} 59 60 // networkpolicies 61 if resource := "networkpolicies"; apiResourceConfigSource.ResourceEnabled(networkingapiv1.SchemeGroupVersion.WithResource(resource)) { 62 networkPolicyStorage, err := networkpolicystore.NewREST(restOptionsGetter) 63 if err != nil { 64 return storage, err 65 } 66 storage[resource] = networkPolicyStorage 67 } 68 69 // ingresses 70 if resource := "ingresses"; apiResourceConfigSource.ResourceEnabled(networkingapiv1.SchemeGroupVersion.WithResource(resource)) { 71 ingressStorage, ingressStatusStorage, err := ingressstore.NewREST(restOptionsGetter) 72 if err != nil { 73 return storage, err 74 } 75 storage[resource] = ingressStorage 76 storage[resource+"/status"] = ingressStatusStorage 77 } 78 79 // ingressclasses 80 if resource := "ingressclasses"; apiResourceConfigSource.ResourceEnabled(networkingapiv1.SchemeGroupVersion.WithResource(resource)) { 81 ingressClassStorage, err := ingressclassstore.NewREST(restOptionsGetter) 82 if err != nil { 83 return storage, err 84 } 85 storage[resource] = ingressClassStorage 86 } 87 88 return storage, nil 89 } 90 91 func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) { 92 storage := map[string]rest.Storage{} 93 94 // ipaddress 95 if resource := "ipaddresses"; apiResourceConfigSource.ResourceEnabled(networkingapiv1alpha1.SchemeGroupVersion.WithResource(resource)) { 96 ipAddressStorage, err := ipaddressstore.NewREST(restOptionsGetter) 97 if err != nil { 98 return storage, err 99 } 100 storage[resource] = ipAddressStorage 101 } 102 103 // servicecidrs 104 if resource := "servicecidrs"; apiResourceConfigSource.ResourceEnabled(networkingapiv1alpha1.SchemeGroupVersion.WithResource(resource)) { 105 serviceCIDRStorage, serviceCIDRStatusStorage, err := servicecidrstore.NewREST(restOptionsGetter) 106 if err != nil { 107 return storage, err 108 } 109 storage[resource] = serviceCIDRStorage 110 storage[resource+"/status"] = serviceCIDRStatusStorage 111 } 112 113 return storage, nil 114 } 115 116 func (p RESTStorageProvider) GroupName() string { 117 return networking.GroupName 118 }