...

Source file src/k8s.io/kubernetes/pkg/registry/apps/rest/storage_apps.go

Documentation: k8s.io/kubernetes/pkg/registry/apps/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  	appsapiv1 "k8s.io/api/apps/v1"
    21  	"k8s.io/apiserver/pkg/registry/generic"
    22  	"k8s.io/apiserver/pkg/registry/rest"
    23  	genericapiserver "k8s.io/apiserver/pkg/server"
    24  	serverstorage "k8s.io/apiserver/pkg/server/storage"
    25  	"k8s.io/kubernetes/pkg/api/legacyscheme"
    26  	"k8s.io/kubernetes/pkg/apis/apps"
    27  	controllerrevisionsstore "k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage"
    28  	daemonsetstore "k8s.io/kubernetes/pkg/registry/apps/daemonset/storage"
    29  	deploymentstore "k8s.io/kubernetes/pkg/registry/apps/deployment/storage"
    30  	replicasetstore "k8s.io/kubernetes/pkg/registry/apps/replicaset/storage"
    31  	statefulsetstore "k8s.io/kubernetes/pkg/registry/apps/statefulset/storage"
    32  )
    33  
    34  // StorageProvider is a struct for apps REST storage.
    35  type StorageProvider struct{}
    36  
    37  // NewRESTStorage returns APIGroupInfo object.
    38  func (p StorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, error) {
    39  	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs)
    40  	// 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.
    41  	// TODO refactor the plumbing to provide the information in the APIGroupInfo
    42  
    43  	if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
    44  		return genericapiserver.APIGroupInfo{}, err
    45  	} else if len(storageMap) > 0 {
    46  		apiGroupInfo.VersionedResourcesStorageMap[appsapiv1.SchemeGroupVersion.Version] = storageMap
    47  	}
    48  
    49  	return apiGroupInfo, nil
    50  }
    51  
    52  func (p StorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
    53  	storage := map[string]rest.Storage{}
    54  
    55  	// deployments
    56  	if resource := "deployments"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) {
    57  		deploymentStorage, err := deploymentstore.NewStorage(restOptionsGetter)
    58  		if err != nil {
    59  			return storage, err
    60  		}
    61  		storage[resource] = deploymentStorage.Deployment
    62  		storage[resource+"/status"] = deploymentStorage.Status
    63  		storage[resource+"/scale"] = deploymentStorage.Scale
    64  	}
    65  
    66  	// statefulsets
    67  	if resource := "statefulsets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) {
    68  		statefulSetStorage, err := statefulsetstore.NewStorage(restOptionsGetter)
    69  		if err != nil {
    70  			return storage, err
    71  		}
    72  		storage[resource] = statefulSetStorage.StatefulSet
    73  		storage[resource+"/status"] = statefulSetStorage.Status
    74  		storage[resource+"/scale"] = statefulSetStorage.Scale
    75  	}
    76  
    77  	// daemonsets
    78  	if resource := "daemonsets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) {
    79  		daemonSetStorage, daemonSetStatusStorage, err := daemonsetstore.NewREST(restOptionsGetter)
    80  		if err != nil {
    81  			return storage, err
    82  		}
    83  		storage[resource] = daemonSetStorage
    84  		storage[resource+"/status"] = daemonSetStatusStorage
    85  	}
    86  
    87  	// replicasets
    88  	if resource := "replicasets"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) {
    89  		replicaSetStorage, err := replicasetstore.NewStorage(restOptionsGetter)
    90  		if err != nil {
    91  			return storage, err
    92  		}
    93  		storage[resource] = replicaSetStorage.ReplicaSet
    94  		storage[resource+"/status"] = replicaSetStorage.Status
    95  		storage[resource+"/scale"] = replicaSetStorage.Scale
    96  	}
    97  
    98  	// controllerrevisions
    99  	if resource := "controllerrevisions"; apiResourceConfigSource.ResourceEnabled(appsapiv1.SchemeGroupVersion.WithResource(resource)) {
   100  		historyStorage, err := controllerrevisionsstore.NewREST(restOptionsGetter)
   101  		if err != nil {
   102  			return storage, err
   103  		}
   104  		storage[resource] = historyStorage
   105  	}
   106  
   107  	return storage, nil
   108  }
   109  
   110  // GroupName returns name of the group
   111  func (p StorageProvider) GroupName() string {
   112  	return apps.GroupName
   113  }
   114  

View as plain text