...
1
16
17 package rest
18
19 import (
20 "k8s.io/apiserver/pkg/registry/generic"
21 "k8s.io/apiserver/pkg/registry/rest"
22 "k8s.io/klog/v2"
23 "k8s.io/kubernetes/pkg/api/legacyscheme"
24 "k8s.io/kubernetes/pkg/apis/storagemigration"
25 "k8s.io/kubernetes/pkg/features"
26
27 svmv1alpha1 "k8s.io/api/storagemigration/v1alpha1"
28 genericapiserver "k8s.io/apiserver/pkg/server"
29 serverstorage "k8s.io/apiserver/pkg/server/storage"
30 utilfeature "k8s.io/apiserver/pkg/util/feature"
31 storagemigrationstore "k8s.io/kubernetes/pkg/registry/storagemigration/storagemigration/storage"
32 )
33
34 type RESTStorageProvider struct{}
35
36 func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, error) {
37 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(storagemigration.GroupName, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs)
38
39 if storageMap, err := p.v1alpha1Storage(apiResourceConfigSource, restOptionsGetter); err != nil {
40 return genericapiserver.APIGroupInfo{}, err
41 } else if len(storageMap) > 0 {
42 apiGroupInfo.VersionedResourcesStorageMap[svmv1alpha1.SchemeGroupVersion.Version] = storageMap
43 }
44
45 return apiGroupInfo, nil
46 }
47
48 func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (map[string]rest.Storage, error) {
49 storage := map[string]rest.Storage{}
50
51 if resource := "storageversionmigrations"; apiResourceConfigSource.ResourceEnabled(svmv1alpha1.SchemeGroupVersion.WithResource(resource)) {
52 if utilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) {
53 svm, svmStatus, err := storagemigrationstore.NewREST(restOptionsGetter)
54 if err != nil {
55 return nil, err
56 }
57 storage[resource] = svm
58 storage[resource+"/status"] = svmStatus
59 } else {
60 klog.Warning("StorageVersionMigrator storage is disabled because the StorageVersionMigrator feature gate is disabled")
61 }
62 }
63
64 return storage, nil
65 }
66
67 func (p RESTStorageProvider) GroupName() string {
68 return storagemigration.GroupName
69 }
70
View as plain text