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