Skip to content

Commit 9e3332c

Browse files
committed
cleanup remaining storage impls
1 parent 70e6259 commit 9e3332c

File tree

9 files changed

+645
-266
lines changed

9 files changed

+645
-266
lines changed

pkg/cmd/server/origin/master.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,9 @@ func (c *MasterConfig) newOpenshiftAPIConfig(kubeAPIServerConfig apiserver.Confi
6262
ret := &OpenshiftAPIConfig{
6363
GenericConfig: &genericConfig,
6464

65-
KubeClientExternal: c.PrivilegedLoopbackKubernetesClientsetExternal,
6665
KubeClientInternal: c.PrivilegedLoopbackKubernetesClientsetInternal,
6766
KubeletClientConfig: c.KubeletClientConfig,
6867
KubeInternalInformers: c.InternalKubeInformers,
69-
AuthorizationInformers: c.AuthorizationInformers,
7068
QuotaInformers: c.QuotaInformers,
7169
SecurityInformers: c.SecurityInformers,
7270
DeprecatedOpenshiftClient: c.PrivilegedLoopbackOpenShiftClient,

pkg/cmd/server/origin/openshift_apiserver.go

Lines changed: 119 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
genericmux "k8s.io/apiserver/pkg/server/mux"
2121
kapi "k8s.io/kubernetes/pkg/api"
2222
v1beta1extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
23-
kclientsetexternal "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
2423
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
2524
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
2625
"k8s.io/kubernetes/pkg/client/retry"
@@ -31,7 +30,6 @@ import (
3130
"github.com/openshift/origin/pkg/api/v1"
3231
authorizationapiserver "github.com/openshift/origin/pkg/authorization/apiserver"
3332
"github.com/openshift/origin/pkg/authorization/authorizer"
34-
authorizationinformer "github.com/openshift/origin/pkg/authorization/generated/informers/internalversion"
3533
buildapiserver "github.com/openshift/origin/pkg/build/apiserver"
3634
osclient "github.com/openshift/origin/pkg/client"
3735
configapi "github.com/openshift/origin/pkg/cmd/server/api"
@@ -44,11 +42,15 @@ import (
4442
networkapiserver "github.com/openshift/origin/pkg/network/apiserver"
4543
oauthapiserver "github.com/openshift/origin/pkg/oauth/apiserver"
4644
"github.com/openshift/origin/pkg/oc/admin/policy"
45+
projectapiserver "github.com/openshift/origin/pkg/project/apiserver"
4746
projectauth "github.com/openshift/origin/pkg/project/auth"
4847
projectcache "github.com/openshift/origin/pkg/project/cache"
48+
quotaapiserver "github.com/openshift/origin/pkg/quota/apiserver"
4949
"github.com/openshift/origin/pkg/quota/controller/clusterquotamapping"
5050
quotainformer "github.com/openshift/origin/pkg/quota/generated/informers/internalversion"
51+
routeapiserver "github.com/openshift/origin/pkg/route/apiserver"
5152
routeallocationcontroller "github.com/openshift/origin/pkg/route/controller/allocation"
53+
securityapiserver "github.com/openshift/origin/pkg/security/apiserver"
5254
securityinformer "github.com/openshift/origin/pkg/security/generated/informers/internalversion"
5355
"github.com/openshift/origin/pkg/security/legacyclient"
5456
sccstorage "github.com/openshift/origin/pkg/security/registry/securitycontextconstraints/etcd"
@@ -67,19 +69,20 @@ import (
6769
securityapiv1 "github.com/openshift/origin/pkg/security/apis/security/v1"
6870
templateapiv1 "github.com/openshift/origin/pkg/template/apis/template/v1"
6971
userapiv1 "github.com/openshift/origin/pkg/user/apis/user/v1"
72+
73+
// register api groups
74+
_ "github.com/openshift/origin/pkg/api/install"
7075
)
7176

7277
type OpenshiftAPIConfig struct {
7378
GenericConfig *genericapiserver.Config
7479

75-
KubeClientExternal kclientsetexternal.Interface
7680
KubeClientInternal kclientsetinternal.Interface
7781
KubeletClientConfig *kubeletclient.KubeletClientConfig
7882
KubeInternalInformers kinternalinformers.SharedInformerFactory
7983

80-
AuthorizationInformers authorizationinformer.SharedInformerFactory
81-
QuotaInformers quotainformer.SharedInformerFactory
82-
SecurityInformers securityinformer.SharedInformerFactory
84+
QuotaInformers quotainformer.SharedInformerFactory
85+
SecurityInformers securityinformer.SharedInformerFactory
8386

8487
// DeprecatedInformers is a shared factory for getting old style openshift informers
8588
DeprecatedOpenshiftClient *osclient.Client
@@ -119,9 +122,6 @@ type OpenshiftAPIConfig struct {
119122
func (c *OpenshiftAPIConfig) Validate() error {
120123
ret := []error{}
121124

122-
if c.KubeClientExternal == nil {
123-
ret = append(ret, fmt.Errorf("KubeClientExternal is required"))
124-
}
125125
if c.KubeClientInternal == nil {
126126
ret = append(ret, fmt.Errorf("KubeClientInternal is required"))
127127
}
@@ -131,9 +131,6 @@ func (c *OpenshiftAPIConfig) Validate() error {
131131
if c.KubeInternalInformers == nil {
132132
ret = append(ret, fmt.Errorf("KubeInternalInformers is required"))
133133
}
134-
if c.AuthorizationInformers == nil {
135-
ret = append(ret, fmt.Errorf("AuthorizationInformers is required"))
136-
}
137134
if c.QuotaInformers == nil {
138135
ret = append(ret, fmt.Errorf("QuotaInformers is required"))
139136
}
@@ -365,13 +362,110 @@ func (c *completedConfig) withOAuthAPIServer(delegateAPIServer genericapiserver.
365362
return server.GenericAPIServer, &legacyStorageVersionMutator{version: oauthapiv1.SchemeGroupVersion, storage: storage}, nil
366363
}
367364

365+
func (c *completedConfig) withProjectAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) {
366+
config := &projectapiserver.ProjectAPIServerConfig{
367+
GenericConfig: c.GenericConfig,
368+
CoreAPIServerClientConfig: c.GenericConfig.LoopbackClientConfig,
369+
KubeInternalInformers: c.KubeInternalInformers,
370+
ProjectAuthorizationCache: c.ProjectAuthorizationCache,
371+
ProjectCache: c.ProjectCache,
372+
ProjectRequestTemplate: c.ProjectRequestTemplate,
373+
ProjectRequestMessage: c.ProjectRequestMessage,
374+
Codecs: kapi.Codecs,
375+
Registry: kapi.Registry,
376+
Scheme: kapi.Scheme,
377+
}
378+
server, err := config.Complete().New(delegateAPIServer)
379+
if err != nil {
380+
return nil, nil, err
381+
}
382+
storage, err := config.V1RESTStorage()
383+
if err != nil {
384+
return nil, nil, err
385+
}
386+
server.GenericAPIServer.PrepareRun() // this triggers openapi construction
387+
388+
return server.GenericAPIServer, &legacyStorageVersionMutator{version: projectapiv1.SchemeGroupVersion, storage: storage}, nil
389+
}
390+
391+
func (c *completedConfig) withQuotaAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) {
392+
config := &quotaapiserver.QuotaAPIServerConfig{
393+
GenericConfig: c.GenericConfig,
394+
ClusterQuotaMappingController: c.ClusterQuotaMappingController,
395+
QuotaInformers: c.QuotaInformers,
396+
KubeInternalInformers: c.KubeInternalInformers,
397+
Codecs: kapi.Codecs,
398+
Registry: kapi.Registry,
399+
Scheme: kapi.Scheme,
400+
}
401+
server, err := config.Complete().New(delegateAPIServer)
402+
if err != nil {
403+
return nil, nil, err
404+
}
405+
storage, err := config.V1RESTStorage()
406+
if err != nil {
407+
return nil, nil, err
408+
}
409+
server.GenericAPIServer.PrepareRun() // this triggers openapi construction
410+
411+
return server.GenericAPIServer, &legacyStorageVersionMutator{version: quotaapiv1.SchemeGroupVersion, storage: storage}, nil
412+
}
413+
414+
func (c *completedConfig) withRouteAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) {
415+
config := &routeapiserver.RouteAPIServerConfig{
416+
GenericConfig: c.GenericConfig,
417+
CoreAPIServerClientConfig: c.GenericConfig.LoopbackClientConfig,
418+
RouteAllocator: c.RouteAllocator,
419+
Codecs: kapi.Codecs,
420+
Registry: kapi.Registry,
421+
Scheme: kapi.Scheme,
422+
}
423+
server, err := config.Complete().New(delegateAPIServer)
424+
if err != nil {
425+
return nil, nil, err
426+
}
427+
storage, err := config.V1RESTStorage()
428+
if err != nil {
429+
return nil, nil, err
430+
}
431+
server.GenericAPIServer.PrepareRun() // this triggers openapi construction
432+
433+
return server.GenericAPIServer, &legacyStorageVersionMutator{version: routeapiv1.SchemeGroupVersion, storage: storage}, nil
434+
}
435+
436+
func (c *completedConfig) withSecurityAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) {
437+
config := &securityapiserver.SecurityAPIServerConfig{
438+
GenericConfig: c.GenericConfig,
439+
CoreAPIServerClientConfig: c.GenericConfig.LoopbackClientConfig,
440+
// SCCStorage is actually created with a kubernetes restmapper options to have the correct prefix,
441+
// so we have to have it special cased here to point to the right spot.
442+
SCCStorage: c.SCCStorage,
443+
SecurityInformers: c.SecurityInformers,
444+
KubeInternalInformers: c.KubeInternalInformers,
445+
Codecs: kapi.Codecs,
446+
Registry: kapi.Registry,
447+
Scheme: kapi.Scheme,
448+
}
449+
server, err := config.Complete().New(delegateAPIServer)
450+
if err != nil {
451+
return nil, nil, err
452+
}
453+
storage, err := config.V1RESTStorage()
454+
if err != nil {
455+
return nil, nil, err
456+
}
457+
server.GenericAPIServer.PrepareRun() // this triggers openapi construction
458+
459+
return server.GenericAPIServer, &legacyStorageVersionMutator{version: securityapiv1.SchemeGroupVersion, storage: storage}, nil
460+
}
461+
368462
func (c *completedConfig) withTemplateAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) {
369463
config := &templateapiserver.TemplateConfig{
370-
GenericConfig: c.GenericConfig,
371-
AuthorizationClient: c.KubeClientInternal.Authorization(),
372-
Codecs: kapi.Codecs,
373-
Registry: kapi.Registry,
374-
Scheme: kapi.Scheme,
464+
GenericConfig: c.GenericConfig,
465+
CoreAPIServerClientConfig: c.GenericConfig.LoopbackClientConfig,
466+
Codecs: kapi.Codecs,
467+
Registry: kapi.Registry,
468+
Scheme: kapi.Scheme,
375469
}
376470
server, err := config.Complete().New(delegateAPIServer)
377471
if err != nil {
@@ -428,6 +522,10 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
428522
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withImageAPIServer)
429523
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withNetworkAPIServer)
430524
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withOAuthAPIServer)
525+
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withProjectAPIServer)
526+
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withQuotaAPIServer)
527+
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withRouteAPIServer)
528+
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withSecurityAPIServer)
431529
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withTemplateAPIServer)
432530
delegateAPIServer, legacyStorageModifier = addAPIServerOrDie(delegateAPIServer, legacyStorageModifier, c.withUserAPIServer)
433531

@@ -440,57 +538,12 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
440538
GenericAPIServer: genericServer,
441539
}
442540

443-
storage, err := c.GetRestStorage()
444-
if err != nil {
445-
return nil, err
541+
legacyStorage := map[schema.GroupVersion]map[string]rest.Storage{
542+
v1.SchemeGroupVersion: {},
446543
}
447-
groupVersions := map[string][]string{}
544+
legacyStorageModifier.mutate(legacyStorage)
448545

449-
// TODO restructure this to be more friendly
450-
// Install Origin API groups
451-
for gv := range storage {
452-
// skip pure-legacy groups as API groups
453-
if gv == v1.SchemeGroupVersion {
454-
continue
455-
}
456-
if !kapi.Registry.IsEnabledVersion(gv) {
457-
continue
458-
}
459-
for _, infos := range apiGroupsVersions {
460-
for _, group := range infos.Versions {
461-
groupVersions[group.Group] = append(groupVersions[group.Group], gv.Version)
462-
}
463-
}
464-
}
465-
466-
for group, versions := range groupVersions {
467-
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(group, kapi.Registry, kapi.Scheme, kapi.ParameterCodec, kapi.Codecs)
468-
469-
for _, version := range versions {
470-
gv := schema.GroupVersion{Group: group, Version: version}
471-
apiGroupInfo.VersionedResourcesStorageMap[version] = storage[gv]
472-
473-
// TODO all of our groups currently have one version, by the time we get more than one, these should be split up
474-
// into their own api servers
475-
if isPreferredGroupVersion(gv) {
476-
apiGroupInfo.GroupMeta.GroupVersion = gv
477-
}
478-
}
479-
480-
if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil {
481-
return nil, fmt.Errorf("unable to initialize %s API group: %v", apiGroupInfo.GroupMeta.GroupVersion, err)
482-
}
483-
glog.Infof("Starting Origin API at %s/%s/%s", api.GroupPrefix, apiGroupInfo.GroupMeta.GroupVersion.Group, apiGroupInfo.GroupMeta.GroupVersion.Version)
484-
}
485-
486-
// after the old-style groupified storage is created, modify the storage map to include the already migrated storage
487-
// to be included in the legacy group
488-
if _, ok := storage[v1.SchemeGroupVersion]; !ok {
489-
storage[v1.SchemeGroupVersion] = map[string]rest.Storage{}
490-
}
491-
legacyStorageModifier.mutate(storage)
492-
493-
if err := s.GenericAPIServer.InstallLegacyAPIGroup(api.Prefix, apiLegacyV1(LegacyStorage(storage))); err != nil {
546+
if err := s.GenericAPIServer.InstallLegacyAPIGroup(api.Prefix, apiLegacyV1(LegacyStorage(legacyStorage))); err != nil {
494547
return nil, fmt.Errorf("Unable to initialize v1 API: %v", err)
495548
}
496549
glog.Infof("Started Origin API at %s/%s", api.Prefix, v1.SchemeGroupVersion.Version)
@@ -584,35 +637,6 @@ func writeJSON(resp *restful.Response, json []byte) {
584637
resp.ResponseWriter.Write(json)
585638
}
586639

587-
// apiGroupInfo represents a set of API group versions and their preferred version.
588-
type apiGroupInfo struct {
589-
PreferredVersion string
590-
Versions []schema.GroupVersion
591-
}
592-
593-
// apiGroupsVersions holds the list of installed Origin API groups and their preferred version.
594-
// FIXME: This should be handled in each REST storage separately and on in one place. That
595-
// will be addressed as a separate issue.
596-
var apiGroupsVersions = []apiGroupInfo{
597-
{PreferredVersion: "v1", Versions: []schema.GroupVersion{securityapiv1.SchemeGroupVersion}},
598-
{PreferredVersion: "v1", Versions: []schema.GroupVersion{projectapiv1.SchemeGroupVersion}},
599-
{PreferredVersion: "v1", Versions: []schema.GroupVersion{quotaapiv1.SchemeGroupVersion}},
600-
{PreferredVersion: "v1", Versions: []schema.GroupVersion{routeapiv1.SchemeGroupVersion}},
601-
}
602-
603-
// isPreferredGroupVersion returns true if the given GroupVersion is preferred version in
604-
// the API group.
605-
func isPreferredGroupVersion(gv schema.GroupVersion) bool {
606-
for _, info := range apiGroupsVersions {
607-
for _, version := range info.Versions {
608-
if version == gv && gv.Version == info.PreferredVersion {
609-
return true
610-
}
611-
}
612-
}
613-
return false
614-
}
615-
616640
func (c *OpenshiftAPIConfig) startClusterQuotaMapping(context genericapiserver.PostStartHookContext) error {
617641
go c.ClusterQuotaMappingController.Run(5, context.StopCh)
618642
return nil

0 commit comments

Comments
 (0)