@@ -20,7 +20,6 @@ import (
20
20
genericmux "k8s.io/apiserver/pkg/server/mux"
21
21
kapi "k8s.io/kubernetes/pkg/api"
22
22
v1beta1extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
23
- kclientsetexternal "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
24
23
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
25
24
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
26
25
"k8s.io/kubernetes/pkg/client/retry"
@@ -31,7 +30,6 @@ import (
31
30
"github.com/openshift/origin/pkg/api/v1"
32
31
authorizationapiserver "github.com/openshift/origin/pkg/authorization/apiserver"
33
32
"github.com/openshift/origin/pkg/authorization/authorizer"
34
- authorizationinformer "github.com/openshift/origin/pkg/authorization/generated/informers/internalversion"
35
33
buildapiserver "github.com/openshift/origin/pkg/build/apiserver"
36
34
osclient "github.com/openshift/origin/pkg/client"
37
35
configapi "github.com/openshift/origin/pkg/cmd/server/api"
@@ -44,11 +42,15 @@ import (
44
42
networkapiserver "github.com/openshift/origin/pkg/network/apiserver"
45
43
oauthapiserver "github.com/openshift/origin/pkg/oauth/apiserver"
46
44
"github.com/openshift/origin/pkg/oc/admin/policy"
45
+ projectapiserver "github.com/openshift/origin/pkg/project/apiserver"
47
46
projectauth "github.com/openshift/origin/pkg/project/auth"
48
47
projectcache "github.com/openshift/origin/pkg/project/cache"
48
+ quotaapiserver "github.com/openshift/origin/pkg/quota/apiserver"
49
49
"github.com/openshift/origin/pkg/quota/controller/clusterquotamapping"
50
50
quotainformer "github.com/openshift/origin/pkg/quota/generated/informers/internalversion"
51
+ routeapiserver "github.com/openshift/origin/pkg/route/apiserver"
51
52
routeallocationcontroller "github.com/openshift/origin/pkg/route/controller/allocation"
53
+ securityapiserver "github.com/openshift/origin/pkg/security/apiserver"
52
54
securityinformer "github.com/openshift/origin/pkg/security/generated/informers/internalversion"
53
55
"github.com/openshift/origin/pkg/security/legacyclient"
54
56
sccstorage "github.com/openshift/origin/pkg/security/registry/securitycontextconstraints/etcd"
@@ -67,19 +69,20 @@ import (
67
69
securityapiv1 "github.com/openshift/origin/pkg/security/apis/security/v1"
68
70
templateapiv1 "github.com/openshift/origin/pkg/template/apis/template/v1"
69
71
userapiv1 "github.com/openshift/origin/pkg/user/apis/user/v1"
72
+
73
+ // register api groups
74
+ _ "github.com/openshift/origin/pkg/api/install"
70
75
)
71
76
72
77
type OpenshiftAPIConfig struct {
73
78
GenericConfig * genericapiserver.Config
74
79
75
- KubeClientExternal kclientsetexternal.Interface
76
80
KubeClientInternal kclientsetinternal.Interface
77
81
KubeletClientConfig * kubeletclient.KubeletClientConfig
78
82
KubeInternalInformers kinternalinformers.SharedInformerFactory
79
83
80
- AuthorizationInformers authorizationinformer.SharedInformerFactory
81
- QuotaInformers quotainformer.SharedInformerFactory
82
- SecurityInformers securityinformer.SharedInformerFactory
84
+ QuotaInformers quotainformer.SharedInformerFactory
85
+ SecurityInformers securityinformer.SharedInformerFactory
83
86
84
87
// DeprecatedInformers is a shared factory for getting old style openshift informers
85
88
DeprecatedOpenshiftClient * osclient.Client
@@ -119,9 +122,6 @@ type OpenshiftAPIConfig struct {
119
122
func (c * OpenshiftAPIConfig ) Validate () error {
120
123
ret := []error {}
121
124
122
- if c .KubeClientExternal == nil {
123
- ret = append (ret , fmt .Errorf ("KubeClientExternal is required" ))
124
- }
125
125
if c .KubeClientInternal == nil {
126
126
ret = append (ret , fmt .Errorf ("KubeClientInternal is required" ))
127
127
}
@@ -131,9 +131,6 @@ func (c *OpenshiftAPIConfig) Validate() error {
131
131
if c .KubeInternalInformers == nil {
132
132
ret = append (ret , fmt .Errorf ("KubeInternalInformers is required" ))
133
133
}
134
- if c .AuthorizationInformers == nil {
135
- ret = append (ret , fmt .Errorf ("AuthorizationInformers is required" ))
136
- }
137
134
if c .QuotaInformers == nil {
138
135
ret = append (ret , fmt .Errorf ("QuotaInformers is required" ))
139
136
}
@@ -365,13 +362,110 @@ func (c *completedConfig) withOAuthAPIServer(delegateAPIServer genericapiserver.
365
362
return server .GenericAPIServer , & legacyStorageVersionMutator {version : oauthapiv1 .SchemeGroupVersion , storage : storage }, nil
366
363
}
367
364
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
+
368
462
func (c * completedConfig ) withTemplateAPIServer (delegateAPIServer genericapiserver.DelegationTarget ) (genericapiserver.DelegationTarget , legacyStorageMutator , error ) {
369
463
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 ,
375
469
}
376
470
server , err := config .Complete ().New (delegateAPIServer )
377
471
if err != nil {
@@ -428,6 +522,10 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
428
522
delegateAPIServer , legacyStorageModifier = addAPIServerOrDie (delegateAPIServer , legacyStorageModifier , c .withImageAPIServer )
429
523
delegateAPIServer , legacyStorageModifier = addAPIServerOrDie (delegateAPIServer , legacyStorageModifier , c .withNetworkAPIServer )
430
524
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 )
431
529
delegateAPIServer , legacyStorageModifier = addAPIServerOrDie (delegateAPIServer , legacyStorageModifier , c .withTemplateAPIServer )
432
530
delegateAPIServer , legacyStorageModifier = addAPIServerOrDie (delegateAPIServer , legacyStorageModifier , c .withUserAPIServer )
433
531
@@ -440,57 +538,12 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
440
538
GenericAPIServer : genericServer ,
441
539
}
442
540
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 : {},
446
543
}
447
- groupVersions := map [ string ][] string {}
544
+ legacyStorageModifier . mutate ( legacyStorage )
448
545
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 {
494
547
return nil , fmt .Errorf ("Unable to initialize v1 API: %v" , err )
495
548
}
496
549
glog .Infof ("Started Origin API at %s/%s" , api .Prefix , v1 .SchemeGroupVersion .Version )
@@ -584,35 +637,6 @@ func writeJSON(resp *restful.Response, json []byte) {
584
637
resp .ResponseWriter .Write (json )
585
638
}
586
639
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
-
616
640
func (c * OpenshiftAPIConfig ) startClusterQuotaMapping (context genericapiserver.PostStartHookContext ) error {
617
641
go c .ClusterQuotaMappingController .Run (5 , context .StopCh )
618
642
return nil
0 commit comments