From 02acb50195fe4be06e8edf5d34fd25c4e358896e Mon Sep 17 00:00:00 2001
From: kaiyou <dev@kaiyou.fr>
Date: Sun, 30 Oct 2022 17:34:22 +0100
Subject: [PATCH] Start hooking into k8s logging

---
 cmd/hepto/root.go          |  2 +-
 go.mod                     |  4 +++-
 go.sum                     |  4 ++++
 pkg/cluster/log.go         | 13 +++++++++++++
 pkg/wrappers/kubernetes.go | 17 ++++++++++++++---
 5 files changed, 35 insertions(+), 5 deletions(-)
 create mode 100644 pkg/cluster/log.go

diff --git a/cmd/hepto/root.go b/cmd/hepto/root.go
index 8ce6343..05fa7de 100644
--- a/cmd/hepto/root.go
+++ b/cmd/hepto/root.go
@@ -18,7 +18,7 @@ var rootCmd = &cobra.Command{
 	Long: `Hepto is a Kubernetes distribution designed for geo-distributed
 	deployments, including across links with noticeable latency.`,
 	Run: func(cmd *cobra.Command, args []string) {
-		logrus.SetLevel(logrus.DebugLevel)
+    cluster.SetupLogging()
 		config.Complete()
 		err := selfcontain.RunFun(&config.Container, func() {
 			config.Node.IP = waitForIP()
diff --git a/go.mod b/go.mod
index 78344cc..02e6a99 100644
--- a/go.mod
+++ b/go.mod
@@ -37,10 +37,12 @@ replace (
 )
 
 require (
+	github.com/bombsimon/logrusr/v3 v3.1.0
 	github.com/containerd/containerd v1.6.8
 	github.com/containerd/go-runc v1.0.0
 	github.com/containerd/ttrpc v1.1.1-0.20220420014843-944ef4a40df3
 	github.com/containernetworking/plugins v1.1.1
+	github.com/go-logr/logr v1.2.3
 	github.com/hashicorp/memberlist v0.4.0
 	github.com/opencontainers/runc v1.1.4
 	github.com/pkg/errors v0.9.1
@@ -54,6 +56,7 @@ require (
 	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8
 	golang.zx2c4.com/wireguard/wgctrl v0.0.0-20220916014741-473347a5e6e3
 	k8s.io/component-base v0.26.0-alpha.1
+	k8s.io/klog v1.0.0
 	k8s.io/kubectl v0.0.0
 	k8s.io/kubernetes v1.25.1
 )
@@ -129,7 +132,6 @@ require (
 	github.com/fsnotify/fsnotify v1.5.4 // indirect
 	github.com/fvbommel/sortorder v1.0.1 // indirect
 	github.com/go-errors/errors v1.0.1 // indirect
-	github.com/go-logr/logr v1.2.3 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/jsonpointer v0.19.5 // indirect
 	github.com/go-openapi/jsonreference v0.19.5 // indirect
diff --git a/go.sum b/go.sum
index dccc1c0..c2e177e 100644
--- a/go.sum
+++ b/go.sum
@@ -152,6 +152,8 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn
 github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
 github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
+github.com/bombsimon/logrusr/v3 v3.1.0 h1:zORbLM943D+hDMGgyjMhSAz/iDz86ZV72qaak/CA0zQ=
+github.com/bombsimon/logrusr/v3 v3.1.0/go.mod h1:PksPPgSFEL2I52pla2glgCyyd2OqOHAnFF5E+g8Ixco=
 github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
 github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
 github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
@@ -1666,6 +1668,8 @@ k8s.io/csi-translation-lib v0.26.0-alpha.1/go.mod h1:c9kcHanouJ7E/kZdDoxOnYqMl22
 k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
diff --git a/pkg/cluster/log.go b/pkg/cluster/log.go
new file mode 100644
index 0000000..a2beee0
--- /dev/null
+++ b/pkg/cluster/log.go
@@ -0,0 +1,13 @@
+package cluster
+
+import (
+	"github.com/bombsimon/logrusr/v3"
+	"github.com/sirupsen/logrus"
+	"k8s.io/klog/v2"
+)
+
+func SetupLogging() {
+	logrus.SetLevel(logrus.DebugLevel)
+	log := logrusr.New(logrus.StandardLogger())
+  klog.SetLogger(log)
+}
diff --git a/pkg/wrappers/kubernetes.go b/pkg/wrappers/kubernetes.go
index 62f3ad4..c1ea209 100644
--- a/pkg/wrappers/kubernetes.go
+++ b/pkg/wrappers/kubernetes.go
@@ -4,22 +4,33 @@ import (
 	"context"
 
 	"github.com/spf13/pflag"
+	restclient "k8s.io/client-go/rest"
 	"k8s.io/component-base/cli/flag"
 	apiserver "k8s.io/kubernetes/cmd/kube-apiserver/app"
 	apiserveropts "k8s.io/kubernetes/cmd/kube-apiserver/app/options"
 	cm "k8s.io/kubernetes/cmd/kube-controller-manager/app"
+	cmopts "k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
 	scheduler "k8s.io/kubernetes/cmd/kube-scheduler/app"
 	scheduleropts "k8s.io/kubernetes/cmd/kube-scheduler/app/options"
 	kubelet "k8s.io/kubernetes/cmd/kubelet/app"
 )
 
 func ControllerManager(ctx context.Context, args []string) (context.Context, error) {
-	command := cm.NewControllerManagerCommand()
-	command.SetArgs(args)
 	newCtx, cancel := context.WithCancel(ctx)
+	s, err := cmopts.NewKubeControllerManagerOptions()
+	if err != nil {
+    cancel()
+		return nil, err
+	}
+	restclient.SetDefaultWarningHandler(restclient.NoWarnings{})
+	c, err := s.Config(cm.KnownControllers(), cm.ControllersDisabledByDefault.List())
+	if err != nil {
+    cancel()
+		return nil, err
+	}
 
 	go func() {
-		command.ExecuteContext(ctx)
+		cm.Run(c.Complete(), ctx.Done())
 		cancel()
 	}()
 
-- 
GitLab