...

Source file src/k8s.io/kubernetes/pkg/registry/networking/rest/storage_settings.go

Documentation: k8s.io/kubernetes/pkg/registry/networking/rest

     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  }
   119  

View as plain text