storage_apps.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. Copyright 2016 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package rest
  14. import (
  15. appsapiv1 "k8s.io/api/apps/v1"
  16. appsapiv1beta1 "k8s.io/api/apps/v1beta1"
  17. appsapiv1beta2 "k8s.io/api/apps/v1beta2"
  18. "k8s.io/apiserver/pkg/registry/generic"
  19. "k8s.io/apiserver/pkg/registry/rest"
  20. genericapiserver "k8s.io/apiserver/pkg/server"
  21. serverstorage "k8s.io/apiserver/pkg/server/storage"
  22. "k8s.io/kubernetes/pkg/api/legacyscheme"
  23. "k8s.io/kubernetes/pkg/apis/apps"
  24. controllerrevisionsstore "k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage"
  25. daemonsetstore "k8s.io/kubernetes/pkg/registry/apps/daemonset/storage"
  26. deploymentstore "k8s.io/kubernetes/pkg/registry/apps/deployment/storage"
  27. replicasetstore "k8s.io/kubernetes/pkg/registry/apps/replicaset/storage"
  28. statefulsetstore "k8s.io/kubernetes/pkg/registry/apps/statefulset/storage"
  29. )
  30. type RESTStorageProvider struct{}
  31. func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
  32. apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs)
  33. // 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.
  34. // TODO refactor the plumbing to provide the information in the APIGroupInfo
  35. if apiResourceConfigSource.VersionEnabled(appsapiv1beta1.SchemeGroupVersion) {
  36. apiGroupInfo.VersionedResourcesStorageMap[appsapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
  37. }
  38. if apiResourceConfigSource.VersionEnabled(appsapiv1beta2.SchemeGroupVersion) {
  39. apiGroupInfo.VersionedResourcesStorageMap[appsapiv1beta2.SchemeGroupVersion.Version] = p.v1beta2Storage(apiResourceConfigSource, restOptionsGetter)
  40. }
  41. if apiResourceConfigSource.VersionEnabled(appsapiv1.SchemeGroupVersion) {
  42. apiGroupInfo.VersionedResourcesStorageMap[appsapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter)
  43. }
  44. return apiGroupInfo, true
  45. }
  46. func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
  47. storage := map[string]rest.Storage{}
  48. // deployments
  49. deploymentStorage := deploymentstore.NewStorage(restOptionsGetter)
  50. storage["deployments"] = deploymentStorage.Deployment
  51. storage["deployments/status"] = deploymentStorage.Status
  52. storage["deployments/rollback"] = deploymentStorage.Rollback
  53. storage["deployments/scale"] = deploymentStorage.Scale
  54. // statefulsets
  55. statefulSetStorage := statefulsetstore.NewStorage(restOptionsGetter)
  56. storage["statefulsets"] = statefulSetStorage.StatefulSet
  57. storage["statefulsets/status"] = statefulSetStorage.Status
  58. storage["statefulsets/scale"] = statefulSetStorage.Scale
  59. // controllerrevisions
  60. historyStorage := controllerrevisionsstore.NewREST(restOptionsGetter)
  61. storage["controllerrevisions"] = historyStorage
  62. return storage
  63. }
  64. func (p RESTStorageProvider) v1beta2Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
  65. storage := map[string]rest.Storage{}
  66. // deployments
  67. deploymentStorage := deploymentstore.NewStorage(restOptionsGetter)
  68. storage["deployments"] = deploymentStorage.Deployment
  69. storage["deployments/status"] = deploymentStorage.Status
  70. storage["deployments/scale"] = deploymentStorage.Scale
  71. // statefulsets
  72. statefulSetStorage := statefulsetstore.NewStorage(restOptionsGetter)
  73. storage["statefulsets"] = statefulSetStorage.StatefulSet
  74. storage["statefulsets/status"] = statefulSetStorage.Status
  75. storage["statefulsets/scale"] = statefulSetStorage.Scale
  76. // daemonsets
  77. daemonSetStorage, daemonSetStatusStorage := daemonsetstore.NewREST(restOptionsGetter)
  78. storage["daemonsets"] = daemonSetStorage
  79. storage["daemonsets/status"] = daemonSetStatusStorage
  80. // replicasets
  81. replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter)
  82. storage["replicasets"] = replicaSetStorage.ReplicaSet
  83. storage["replicasets/status"] = replicaSetStorage.Status
  84. storage["replicasets/scale"] = replicaSetStorage.Scale
  85. // controllerrevisions
  86. historyStorage := controllerrevisionsstore.NewREST(restOptionsGetter)
  87. storage["controllerrevisions"] = historyStorage
  88. return storage
  89. }
  90. func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
  91. storage := map[string]rest.Storage{}
  92. // deployments
  93. deploymentStorage := deploymentstore.NewStorage(restOptionsGetter)
  94. storage["deployments"] = deploymentStorage.Deployment
  95. storage["deployments/status"] = deploymentStorage.Status
  96. storage["deployments/scale"] = deploymentStorage.Scale
  97. // statefulsets
  98. statefulSetStorage := statefulsetstore.NewStorage(restOptionsGetter)
  99. storage["statefulsets"] = statefulSetStorage.StatefulSet
  100. storage["statefulsets/status"] = statefulSetStorage.Status
  101. storage["statefulsets/scale"] = statefulSetStorage.Scale
  102. // daemonsets
  103. daemonSetStorage, daemonSetStatusStorage := daemonsetstore.NewREST(restOptionsGetter)
  104. storage["daemonsets"] = daemonSetStorage
  105. storage["daemonsets/status"] = daemonSetStatusStorage
  106. // replicasets
  107. replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter)
  108. storage["replicasets"] = replicaSetStorage.ReplicaSet
  109. storage["replicasets/status"] = replicaSetStorage.Status
  110. storage["replicasets/scale"] = replicaSetStorage.Scale
  111. // controllerrevisions
  112. historyStorage := controllerrevisionsstore.NewREST(restOptionsGetter)
  113. storage["controllerrevisions"] = historyStorage
  114. return storage
  115. }
  116. func (p RESTStorageProvider) GroupName() string {
  117. return apps.GroupName
  118. }