...
1
16
17 package rest
18
19 import (
20 storageapiv1 "k8s.io/api/storage/v1"
21 storageapiv1alpha1 "k8s.io/api/storage/v1alpha1"
22 storageapiv1beta1 "k8s.io/api/storage/v1beta1"
23 "k8s.io/apiserver/pkg/registry/generic"
24 "k8s.io/apiserver/pkg/registry/rest"
25 genericapiserver "k8s.io/apiserver/pkg/server"
26 serverstorage "k8s.io/apiserver/pkg/server/storage"
27 "k8s.io/kubernetes/pkg/api/legacyscheme"
28 storageapi "k8s.io/kubernetes/pkg/apis/storage"
29 csidriverstore "k8s.io/kubernetes/pkg/registry/storage/csidriver/storage"
30 csinodestore "k8s.io/kubernetes/pkg/registry/storage/csinode/storage"
31 csistoragecapacitystore "k8s.io/kubernetes/pkg/registry/storage/csistoragecapacity/storage"
32 storageclassstore "k8s.io/kubernetes/pkg/registry/storage/storageclass/storage"
33 volumeattachmentstore "k8s.io/kubernetes/pkg/registry/storage/volumeattachment/storage"
34 volumeattributesclassstore "k8s.io/kubernetes/pkg/registry/storage/volumeattributesclass/storage"
35 )
36
37 type RESTStorageProvider struct {
38 }
39
40 func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, error) {
41 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(storageapi.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs)
42
43
44
45 if storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
46 return genericapiserver.APIGroupInfo{}, err
47 } else if len(storageMap) > 0 {
48 apiGroupInfo.VersionedResourcesStorageMap[storageapiv1alpha1.SchemeGroupVersion.Version] = storageMap
49 }
50 if storageMap, err := p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
51 return genericapiserver.APIGroupInfo{}, err
52 } else if len(storageMap) > 0 {
53 apiGroupInfo.VersionedResourcesStorageMap[storageapiv1beta1.SchemeGroupVersion.Version] = storageMap
54 }
55 if storageMap, err := p.v1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
56 return genericapiserver.APIGroupInfo{}, err
57 } else if len(storageMap) > 0 {
58 apiGroupInfo.VersionedResourcesStorageMap[storageapiv1.SchemeGroupVersion.Version] = storageMap
59 }
60
61 return apiGroupInfo, nil
62 }
63
64 func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
65 storage := map[string]rest.Storage{}
66
67
68 if resource := "volumeattributesclasses"; apiResourceConfigSource.ResourceEnabled(storageapiv1alpha1.SchemeGroupVersion.WithResource(resource)) {
69 volumeAttributesClassStorage, err := volumeattributesclassstore.NewREST(restOptionsGetter)
70 if err != nil {
71 return storage, err
72 }
73 storage[resource] = volumeAttributesClassStorage
74 }
75
76 return storage, nil
77 }
78
79 func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
80 storage := map[string]rest.Storage{}
81
82 return storage, nil
83 }
84
85 func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
86 storageClassStorage, err := storageclassstore.NewREST(restOptionsGetter)
87 if err != nil {
88 return nil, err
89 }
90 volumeAttachmentStorage, err := volumeattachmentstore.NewStorage(restOptionsGetter)
91 if err != nil {
92 return nil, err
93 }
94
95 storage := map[string]rest.Storage{}
96
97
98 if resource := "storageclasses"; apiResourceConfigSource.ResourceEnabled(storageapiv1.SchemeGroupVersion.WithResource(resource)) {
99 storage[resource] = storageClassStorage
100 }
101
102
103 if resource := "volumeattachments"; apiResourceConfigSource.ResourceEnabled(storageapiv1.SchemeGroupVersion.WithResource(resource)) {
104 storage[resource] = volumeAttachmentStorage.VolumeAttachment
105 storage[resource+"/status"] = volumeAttachmentStorage.Status
106 }
107
108
109 if resource := "csinodes"; apiResourceConfigSource.ResourceEnabled(storageapiv1.SchemeGroupVersion.WithResource(resource)) {
110 csiNodeStorage, err := csinodestore.NewStorage(restOptionsGetter)
111 if err != nil {
112 return nil, err
113 }
114 storage[resource] = csiNodeStorage.CSINode
115 }
116
117
118 if resource := "csidrivers"; apiResourceConfigSource.ResourceEnabled(storageapiv1.SchemeGroupVersion.WithResource(resource)) {
119 csiDriverStorage, err := csidriverstore.NewStorage(restOptionsGetter)
120 if err != nil {
121 return storage, err
122 }
123 storage[resource] = csiDriverStorage.CSIDriver
124 }
125
126
127 if resource := "csistoragecapacities"; apiResourceConfigSource.ResourceEnabled(storageapiv1.SchemeGroupVersion.WithResource(resource)) {
128 csiStorageStorage, err := csistoragecapacitystore.NewStorage(restOptionsGetter)
129 if err != nil {
130 return storage, err
131 }
132 storage[resource] = csiStorageStorage.CSIStorageCapacity
133 }
134
135 return storage, nil
136 }
137
138 func (p RESTStorageProvider) GroupName() string {
139 return storageapi.GroupName
140 }
141
View as plain text