From 12312f3840e0cf01542ec8d002ea9945fe45977b Mon Sep 17 00:00:00 2001 From: kaiyou <dev@kaiyou.fr> Date: Sat, 27 Jul 2024 23:16:28 +0200 Subject: [PATCH] Enable the admission post-start-hook --- services/apiserver.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/services/apiserver.go b/services/apiserver.go index 9ac208b..980c13f 100644 --- a/services/apiserver.go +++ b/services/apiserver.go @@ -91,7 +91,7 @@ var kubeApiserver = &Unit{ Name: "kube-apiserver", Dependencies: []*Unit{etcd, pkiMaster, vpn, memberlist, kubeLogger}, Run: func(u *Unit, c *Cluster, ctx context.Context) error { - config, clients, err := buildConfig(c) + config, clients, hooks, err := buildConfig(c) if err != nil { return err } @@ -111,6 +111,12 @@ var kubeApiserver = &Unit{ if err != nil { return fmt.Errorf("could not build apiserver config: %w", err) } + for name, hook := range hooks { + err = apiConfig.GenericConfig.AddPostStartHook(name, hook) + if err != nil { + return fmt.Errorf("could not add a post-start-hook: %w", err) + } + } apiServer, err := apiConfig.Complete().New(extensionServer.GenericAPIServer) if err != nil { return fmt.Errorf("could not initialize generic apiserver: %w", err) @@ -176,10 +182,12 @@ var kubeApiserver = &Unit{ // Build a generic apiserver config, that is used and tweaked for various instanciated servers (native, extensions, etc.) // Be careful, config is returned as a pointer, so it must be explicitely shallow copied before tweaking -func buildConfig(c *Cluster) (config *server.Config, clients *k8s.Clients, err error) { +func buildConfig(c *Cluster) (config *server.Config, clients *k8s.Clients, hooks map[string]server.PostStartHookFunc, err error) { + // Initialize return values + config = server.NewConfig(legacyscheme.Codecs) + hooks = map[string]server.PostStartHookFunc{} // Initialize a basic configuration object ver := version.Get() - config = server.NewConfig(legacyscheme.Codecs) config.Version = &ver config.Serializer = legacyscheme.Codecs config.LongRunningFunc = filters.BasicLongRunningRequestCheck( @@ -316,12 +324,12 @@ func buildConfig(c *Cluster) (config *server.Config, clients *k8s.Clients, err e LoopbackClientConfig: config.LoopbackClientConfig, } schemaResolver := resolver.NewDefinitionsSchemaResolver(scheme.Scheme, config.OpenAPIConfig.GetDefinitions) - // TODO: do something with the post start hook - heperInitializers, _, err := admissionConfig.New(nil, nil, clients.ServiceResolver(), nil, schemaResolver) + heperInitializers, admissionHook, err := admissionConfig.New(nil, nil, clients.ServiceResolver(), nil, schemaResolver) if err != nil { err = fmt.Errorf("could not prepare the admission config: %w", err) return } + hooks["initialize-admission"] = admissionHook initializersChain = append(initializersChain, heperInitializers...) // Actually build the admission chain // The plugins config is an instance that just returns nil for every plugin, the decorators instance does nothing -- GitLab