Skip to content

Commit

Permalink
Merge pull request #379 from atiratree/wire-openapi-v3-aggregation
Browse files Browse the repository at this point in the history
wire openapi v3 aggregation controller
  • Loading branch information
openshift-merge-robot committed Jun 29, 2023
2 parents 4a65ce7 + bfc7c0d commit 115e0f9
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,2 +1,3 @@
/openshift-apiserver
/_output
.idea
4 changes: 4 additions & 0 deletions pkg/cmd/openshift-apiserver/openshiftapiserver/config.go
Expand Up @@ -106,6 +106,10 @@ func NewOpenshiftAPIConfig(config *openshiftcontrolplanev1.OpenShiftAPIServerCon
genericConfig.MaxMutatingRequestsInFlight = int(config.ServingInfo.MaxRequestsInFlight / 2)
genericConfig.LongRunningFunc = apiserverconfig.IsLongRunningRequest
genericConfig.AggregatedDiscoveryGroupManager = aggregated.NewResourceManager("apis")
// do not to install the default OpenAPI handler in the aggregated apiserver
// as it will be handled by openapi aggregator (both v2 and v3)
// non-root apiservers must set this value to false
genericConfig.Config.SkipOpenAPIInstallation = true

etcdOptions, err := ToEtcdOptions(config.APIServerArguments, config.StorageConfig)
if err != nil {
Expand Down
Expand Up @@ -24,6 +24,8 @@ import (
"k8s.io/klog/v2"
openapicontroller "k8s.io/kube-aggregator/pkg/controllers/openapi"
"k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator"
openapiv3controller "k8s.io/kube-aggregator/pkg/controllers/openapiv3"
openapiv3aggregator "k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator"
"k8s.io/kubernetes/pkg/api/legacyscheme"
rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest"
rbacregistryvalidation "k8s.io/kubernetes/pkg/registry/rbac/validation"
Expand Down Expand Up @@ -173,6 +175,8 @@ func (c *completedConfig) withAppsAPIServer(delegateAPIServer genericapiserver.D
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -194,6 +198,8 @@ func (c *completedConfig) withAuthorizationAPIServer(delegateAPIServer genericap
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -212,6 +218,8 @@ func (c *completedConfig) withBuildAPIServer(delegateAPIServer genericapiserver.
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -235,6 +243,8 @@ func (c *completedConfig) withImageAPIServer(delegateAPIServer genericapiserver.
OperatorInformers: c.ExtraConfig.OperatorInformers,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -258,6 +268,8 @@ func (c *completedConfig) withProjectAPIServer(delegateAPIServer genericapiserve
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -277,6 +289,8 @@ func (c *completedConfig) withQuotaAPIServer(delegateAPIServer genericapiserver.
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -296,6 +310,8 @@ func (c *completedConfig) withRouteAPIServer(delegateAPIServer genericapiserver.
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -317,6 +333,8 @@ func (c *completedConfig) withSecurityAPIServer(delegateAPIServer genericapiserv
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -335,6 +353,8 @@ func (c *completedConfig) withTemplateAPIServer(delegateAPIServer genericapiserv
Scheme: legacyscheme.Scheme,
},
}
// server is required to install OpenAPI to register and serve openapi spec for its types
cfg.GenericConfig.SkipOpenAPIInstallation = false
config := cfg.Complete()
server, err := config.New(delegateAPIServer)
if err != nil {
Expand All @@ -345,17 +365,10 @@ func (c *completedConfig) withTemplateAPIServer(delegateAPIServer genericapiserv
}

func (c *completedConfig) WithOpenAPIAggregationController(delegatedAPIServer *genericapiserver.GenericAPIServer) error {
// We must remove openapi config-related fields from the head of the delegation chain that we pass to the OpenAPI aggregation controller.
// This is necessary in order to prevent conflicts with the aggregation controller, as it expects the apiserver passed to it to have
// no openapi config previously set. An alternative to stripping this data away would be to create and append a new apiserver to the head
// of the delegation chain altogether, then pass that to the controller. But in the spirit of simplicity, we'll just strip default
// openapi fields that may have been previously set.
delegatedAPIServer.RemoveOpenAPIData()

specDownloader := aggregator.NewDownloader()
openAPIAggregator, err := aggregator.BuildAndRegisterAggregator(
&specDownloader,
delegatedAPIServer,
delegatedAPIServer.NextDelegate(),
delegatedAPIServer.Handler.GoRestfulContainer.RegisteredWebServices(),
configprocessing.DefaultOpenAPIConfig(),
delegatedAPIServer.Handler.NonGoRestfulMux)
Expand All @@ -371,6 +384,24 @@ func (c *completedConfig) WithOpenAPIAggregationController(delegatedAPIServer *g
return nil
}

func (c *completedConfig) WithOpenAPIV3AggregationController(delegatedAPIServer *genericapiserver.GenericAPIServer) error {
specDownloaderV3 := openapiv3aggregator.NewDownloader()
openAPIV3Aggregator, err := openapiv3aggregator.BuildAndRegisterAggregator(
specDownloaderV3,
delegatedAPIServer.NextDelegate(),
delegatedAPIServer.Handler.NonGoRestfulMux)
if err != nil {
return err
}
openAPIV3AggregationController := openapiv3controller.NewAggregationController(openAPIV3Aggregator)

delegatedAPIServer.AddPostStartHook("apiservice-openapiv3-controller", func(context genericapiserver.PostStartHookContext) error {
go openAPIV3AggregationController.Run(context.StopCh)
return nil
})
return nil
}

type apiServerAppenderFunc func(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, error)

func addAPIServerOrDie(delegateAPIServer genericapiserver.DelegationTarget, apiServerAppenderFn apiServerAppenderFunc) genericapiserver.DelegationTarget {
Expand Down
3 changes: 3 additions & 0 deletions pkg/cmd/openshift-apiserver/server.go
Expand Up @@ -43,6 +43,9 @@ func RunOpenShiftAPIServer(serverConfig *openshiftcontrolplanev1.OpenShiftAPISer
if err := completedOpenshiftAPIServer.WithOpenAPIAggregationController(preparedOpenshiftAPIServer.GenericAPIServer); err != nil {
return err
}
if err := completedOpenshiftAPIServer.WithOpenAPIV3AggregationController(preparedOpenshiftAPIServer.GenericAPIServer); err != nil {
return err
}

klog.Infof("Starting master on %s (%s)", serverConfig.ServingInfo.BindAddress, version.Get().String())

Expand Down

0 comments on commit 115e0f9

Please sign in to comment.