-
Notifications
You must be signed in to change notification settings - Fork 334
/
rest.go
121 lines (101 loc) · 5.7 KB
/
rest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* Tencent is pleased to support the open source community by making TKEStack
* available.
*
* Copyright (C) 2012-2019 Tencent. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the
* License at
*
* https://opensource.org/licenses/Apache-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package rest
import (
v1 "k8s.io/api/apps/v1"
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/rest"
genericserver "k8s.io/apiserver/pkg/server"
serverstorage "k8s.io/apiserver/pkg/server/storage"
restclient "k8s.io/client-go/rest"
platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion"
"tkestack.io/tke/api/platform"
"tkestack.io/tke/pkg/apiserver/storage"
clusterstorage "tkestack.io/tke/pkg/platform/registry/cluster/storage"
clusteraddontypestorage "tkestack.io/tke/pkg/platform/registry/clusteraddontype/storage"
clustercredentialstorage "tkestack.io/tke/pkg/platform/registry/clustercredential/storage"
configmapstorage "tkestack.io/tke/pkg/platform/registry/configmap/storage"
cronhpastorage "tkestack.io/tke/pkg/platform/registry/cronhpa/storage"
csioperatorstorage "tkestack.io/tke/pkg/platform/registry/csioperator/storage"
machinestorage "tkestack.io/tke/pkg/platform/registry/machine/storage"
persistenteventstorage "tkestack.io/tke/pkg/platform/registry/persistentevent/storage"
registrystorage "tkestack.io/tke/pkg/platform/registry/registry/storage"
tappcontrollertorage "tkestack.io/tke/pkg/platform/registry/tappcontroller/storage"
)
// StorageProvider is a REST type for core resources storage that implement
// RestStorageProvider interface
type StorageProvider struct {
LoopbackClientConfig *restclient.Config
PrivilegedUsername string
}
// Implement RESTStorageProvider
var _ storage.RESTStorageProvider = &StorageProvider{}
// NewRESTStorage is a factory constructor to creates and returns the APIGroupInfo
func (s *StorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericserver.APIGroupInfo, bool) {
apiGroupInfo := genericserver.NewDefaultAPIGroupInfo(platform.GroupName, platform.Scheme, platform.ParameterCodec, platform.Codecs)
apiGroupInfo.VersionedResourcesStorageMap[v1.SchemeGroupVersion.Version] = s.v1Storage(apiResourceConfigSource, restOptionsGetter, s.LoopbackClientConfig)
return apiGroupInfo, true
}
// GroupName return the api group name
func (*StorageProvider) GroupName() string {
return platform.GroupName
}
func (s *StorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter, loopbackClientConfig *restclient.Config) map[string]rest.Storage {
platformClient := platforminternalclient.NewForConfigOrDie(loopbackClientConfig)
storageMap := make(map[string]rest.Storage)
{
clusterREST := clusterstorage.NewStorage(restOptionsGetter, platformClient, loopbackClientConfig.Host, s.PrivilegedUsername)
storageMap["clusters"] = clusterREST.Cluster
storageMap["clusters/status"] = clusterREST.Status
storageMap["clusters/finalize"] = clusterREST.Finalize
storageMap["clusters/drain"] = clusterREST.Drain
storageMap["clusters/proxy"] = clusterREST.Proxy
storageMap["clusters/apply"] = clusterREST.Apply
storageMap["clusters/apiresources"] = clusterREST.APIResources
storageMap["clusters/tapps"] = clusterREST.TappController
storageMap["clusters/csis"] = clusterREST.CSI
storageMap["clusters/cronhpas"] = clusterREST.CronHPA
storageMap["clusters/addons"] = clusterREST.Addon
storageMap["clusters/addontypes"] = clusterREST.AddonType
machineREST := machinestorage.NewStorage(restOptionsGetter, platformClient, s.PrivilegedUsername)
storageMap["machines"] = machineREST.Machine
storageMap["machines/status"] = machineREST.Status
storageMap["machines/finalize"] = machineREST.Finalize
clusterCredentialREST := clustercredentialstorage.NewStorage(restOptionsGetter, platformClient, s.PrivilegedUsername)
storageMap["clustercredentials"] = clusterCredentialREST.ClusterCredential
clusterAddonTypeREST := clusteraddontypestorage.NewStorage(restOptionsGetter)
storageMap["clusteraddontypes"] = clusterAddonTypeREST.ClusterAddonType
persistentEventREST := persistenteventstorage.NewStorage(restOptionsGetter, s.PrivilegedUsername)
storageMap["persistentevents"] = persistentEventREST.PersistentEvent
storageMap["persistentevents/status"] = persistentEventREST.Status
configmapREST := configmapstorage.NewStorage(restOptionsGetter)
storageMap["configmaps"] = configmapREST.ConfigMap
registryREST := registrystorage.NewStorage(restOptionsGetter, s.PrivilegedUsername)
storageMap["registries"] = registryREST.Registry
tappControllerREST := tappcontrollertorage.NewStorage(restOptionsGetter, s.PrivilegedUsername)
storageMap["tappcontrollers"] = tappControllerREST.TappController
storageMap["tappcontrollers/status"] = tappControllerREST.Status
csiOperatorREST := csioperatorstorage.NewStorage(restOptionsGetter, s.PrivilegedUsername)
storageMap["csioperators"] = csiOperatorREST.CSIOperator
storageMap["csioperators/status"] = csiOperatorREST.Status
cronHPAREST := cronhpastorage.NewStorage(restOptionsGetter, s.PrivilegedUsername)
storageMap["cronhpas"] = cronHPAREST.CronHPA
storageMap["cronhpas/status"] = cronHPAREST.Status
}
return storageMap
}