From 148bc92a1f56b92127f687cee83e1f124e151d7d Mon Sep 17 00:00:00 2001
From: kaiyou <dev@kaiyou.fr>
Date: Sat, 4 Mar 2023 13:05:32 +0100
Subject: [PATCH] Wait for apiserver to be ready before running scheduler and
 cm

---
 services/k8s.go | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/services/k8s.go b/services/k8s.go
index 7b62c6e..2f0d8b4 100644
--- a/services/k8s.go
+++ b/services/k8s.go
@@ -8,6 +8,7 @@ import (
 	"github.com/spf13/pflag"
 	"go.acides.org/hepto/utils"
 	core "k8s.io/api/core/v1"
+	meta "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apiserver/pkg/util/feature"
 	"k8s.io/client-go/dynamic"
 	"k8s.io/client-go/dynamic/dynamicinformer"
@@ -91,6 +92,26 @@ var kubeApiserver = &Unit{
 		}
 		return prepared.Run(ctx.Done())
 	},
+	Ready: func(u *Unit, c *Cluster) bool {
+		u.Logger.Info("checking if apiserver is ready")
+		kc := &rest.Config{
+			Host: fmt.Sprintf("https://[%s]:6443", c.networking.NodeAddress.IP.String()),
+			TLSClientConfig: rest.TLSClientConfig{
+				CAFile:   c.pki.TLS.CertPath(),
+				CertFile: c.masterCerts.SchedulerAPI.CertPath(),
+				KeyFile:  c.masterCerts.SchedulerAPI.KeyPath(),
+			},
+		}
+		client, err := kubernetes.NewForConfig(rest.AddUserAgent(kc, "scheduler"))
+		if err != nil {
+			return false
+		}
+		_, err = client.CoreV1().Nodes().List(context.Background(), meta.ListOptions{})
+		if err != nil {
+			return false
+		}
+		return true
+	},
 }
 
 var kubeControllerManager = &Unit{
-- 
GitLab