forked from kubernetes-retired/service-catalog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tpr_config.go
106 lines (94 loc) · 3.44 KB
/
tpr_config.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
/*
Copyright 2017 The Kubernetes Authors.
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
http://www.apache.org/licenses/LICENSE-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 OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package apiserver
import (
"github.com/golang/glog"
"github.com/kubernetes-incubator/service-catalog/pkg/registry/servicecatalog/server"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/storage"
restclient "k8s.io/client-go/rest"
)
// tprConfig is the configuration needed to run the API server in TPR storage mode
type tprConfig struct {
restClient restclient.Interface
genericConfig *genericapiserver.Config
globalNamespace string
storageFactory storage.StorageFactory
}
// NewTPRConfig returns a new Config for a server that is backed by TPR storage
func NewTPRConfig(
restClient restclient.Interface,
genericCfg *genericapiserver.Config,
globalNS string,
factory storage.StorageFactory,
) Config {
return &tprConfig{
restClient: restClient,
genericConfig: genericCfg,
globalNamespace: globalNS,
storageFactory: factory,
}
}
// Complete fills in the remaining fields of t and returns a completed config
func (t *tprConfig) Complete() CompletedConfig {
completeGenericConfig(t.genericConfig)
return &completedTPRConfig{
restClient: t.restClient,
tprConfig: t,
// Not every API group compiled in is necessarily enabled by the operator
// at runtime.
//
// Install the API resource config source, which describes versions of
// which API groups are enabled.
apiResourceConfigSource: DefaultAPIResourceConfigSource(),
factory: t.storageFactory,
}
}
// CompletedTPRConfig is the completed version of the TPR config. It can be used to create a
// new server, ready to be run
type completedTPRConfig struct {
restClient restclient.Interface
*tprConfig
apiResourceConfigSource storage.APIResourceConfigSource
factory storage.StorageFactory
}
// NewServer returns a new service catalog server, that is ready for execution
func (c *completedTPRConfig) NewServer() (*ServiceCatalogAPIServer, error) {
s, err := createSkeletonServer(c.tprConfig.genericConfig)
if err != nil {
return nil, err
}
glog.V(4).Infoln("Created skeleton API server. Installing API groups")
roFactory := tprRESTOptionsFactory{
storageFactory: c.factory,
}
providers := restStorageProviders(c.globalNamespace, server.StorageTypeTPR, c.restClient)
for _, provider := range providers {
groupInfo, err := provider.NewRESTStorage(
c.apiResourceConfigSource, // genericapiserver.APIResourceConfigSource
roFactory, // registry.RESTOptionsGetter
)
if IsErrAPIGroupDisabled(err) {
glog.Warningf("Skipping API group %v because it is not enabled", provider.GroupName())
continue
} else if err != nil {
return nil, err
}
glog.V(4).Infof("Installing API group %v", provider.GroupName())
if err := s.GenericAPIServer.InstallAPIGroup(groupInfo); err != nil {
glog.Fatalf("Error installing API group %v: %v", provider.GroupName(), err)
}
}
glog.Infoln("Finished installing API groups")
return s, nil
}