From 543d978778bc5d02f21046e7a8f333ed11e9616d Mon Sep 17 00:00:00 2001 From: kaiyou <dev@kaiyou.fr> Date: Sun, 16 Oct 2022 20:12:02 +0200 Subject: [PATCH] More generic function for writing config files --- pkg/cluster/env.go | 9 +------ pkg/cluster/kubeconfig.go | 54 ++++++++++++++++++++++----------------- pkg/cluster/services.go | 16 ++++-------- 3 files changed, 36 insertions(+), 43 deletions(-) diff --git a/pkg/cluster/env.go b/pkg/cluster/env.go index 65e4b43..5305533 100644 --- a/pkg/cluster/env.go +++ b/pkg/cluster/env.go @@ -37,19 +37,12 @@ func (c *Cluster) initEnv() { } // Create the admin kubeconfig on master only if c.node.Role == Master { - err = os.MkdirAll(path.Join(homeDir, ".kube"), 0o755) - if err != nil { - logrus.Fatal(err) - } rootConfig := KubeConfig{ URL: fmt.Sprintf("https://[%s]:6443", c.networking.NodeAddress.IP.String()), CACert: c.pki.TLS.CertPath(), ClientKey: c.masterCerts.RootClient.KeyPath(), ClientCert: c.masterCerts.RootClient.CertPath(), } - err = rootConfig.Write(path.Join(homeDir, ".kube/config")) - if err != nil { - logrus.Fatal(err) - } + WriteConfig(rootConfig, path.Join(homeDir, ".kube/config")) } } diff --git a/pkg/cluster/kubeconfig.go b/pkg/cluster/kubeconfig.go index 05e0da5..c5c945c 100644 --- a/pkg/cluster/kubeconfig.go +++ b/pkg/cluster/kubeconfig.go @@ -2,9 +2,33 @@ package cluster import ( "os" + "path" "text/template" + + "github.com/sirupsen/logrus" ) +type WriteableConfig interface { + Template() string +} + +func WriteConfig(c WriteableConfig, dest string) { + t, _ := template.New("template").Parse(c.Template()) + err := os.MkdirAll(path.Dir(dest), 0o755) + if err != nil { + logrus.Fatal(err) + } + file, err := os.Create(dest) + if err != nil { + logrus.Fatal(err) + } + defer file.Close() + err = t.Execute(file, c) + if err != nil { + logrus.Fatal(err) + } +} + const kubeconfigTemplate = ` apiVersion: v1 clusters: @@ -35,14 +59,8 @@ type KubeConfig struct { ClientKey string } -func (k *KubeConfig) Write(path string) error { - t, _ := template.New("kubeconfig").Parse(kubeconfigTemplate) - file, err := os.Create(path) - if err != nil { - return err - } - defer file.Close() - return t.Execute(file, k) +func (KubeConfig) Template() string { + return kubeconfigTemplate } const kubeletConfigTemplate = ` @@ -77,14 +95,8 @@ type KubeletConfig struct { TLSKey string } -func (k *KubeletConfig) Write(path string) error { - t, _ := template.New("kubeletconfig").Parse(kubeletConfigTemplate) - file, err := os.Create(path) - if err != nil { - return err - } - defer file.Close() - return t.Execute(file, k) +func (KubeletConfig) Template() string { + return kubeletConfigTemplate } const containerdTemplate = ` @@ -109,12 +121,6 @@ type ContainerdConfig struct { Socket string } -func (c *ContainerdConfig) Write(path string) error { - t, _ := template.New("containerd").Parse(containerdTemplate) - file, err := os.Create(path) - if err != nil { - return err - } - defer file.Close() - return t.Execute(file, c) +func (ContainerdConfig) Template() string { + return containerdTemplate } diff --git a/pkg/cluster/services.go b/pkg/cluster/services.go index 7c34652..1f1e795 100644 --- a/pkg/cluster/services.go +++ b/pkg/cluster/services.go @@ -97,10 +97,7 @@ func (s *ClusterServices) startK8sMaster(net *ClusterNetworking, ca *pki.Cluster ClientKey: certs.ControllersAPI.KeyPath(), } cmConfigPath := "/cm.yaml" - err = cmConfig.Write(cmConfigPath) - if err != nil { - logrus.Fatal(err) - } + WriteConfig(cmConfig, cmConfigPath) cm, err := wrappers.ControllerManager(s.ctx, []string{ "--kubeconfig", cmConfigPath, "--tls-cert-file", certs.ControllersTLS.CertPath(), @@ -118,10 +115,7 @@ func (s *ClusterServices) startK8sMaster(net *ClusterNetworking, ca *pki.Cluster ClientKey: certs.SchedulerAPI.KeyPath(), } schedulerConfigPath := "/scheduler.yaml" - err = schedulerConfig.Write(schedulerConfigPath) - if err != nil { - logrus.Fatal(err) - } + WriteConfig(schedulerConfig, schedulerConfigPath) scheduler, err := wrappers.Scheduler(s.ctx, []string{ "--kubeconfig", schedulerConfigPath, }) @@ -140,7 +134,7 @@ func (s *ClusterServices) startK8sNode(master net.IP, ca *pki.ClusterCA, certs * Socket: "/containerd.sock", } containerdConfigPath := "/containerd.toml" - containerdConfig.Write(containerdConfigPath) + WriteConfig(containerdConfig, containerdConfigPath) containerd, err := wrappers.Containerd(s.ctx, []string{ "--config", containerdConfigPath, }) @@ -155,14 +149,14 @@ func (s *ClusterServices) startK8sNode(master net.IP, ca *pki.ClusterCA, certs * ClientKey: certs.API.KeyPath(), } kubeletKubeConfigPath := "/kubelet-kubeconfig.yaml" - kubeletKubeConfig.Write(kubeletKubeConfigPath) + WriteConfig(kubeletKubeConfig, kubeletKubeConfigPath) kubeletConfig := KubeletConfig{ CACert: ca.Kubelet.CertPath(), TLSCert: certs.TLS.CertPath(), TLSKey: certs.TLS.KeyPath(), } kubeletConfigPath := "/kubelet.yaml" - kubeletConfig.Write(kubeletConfigPath) + WriteConfig(kubeletConfig, kubeletConfigPath) kubelet, err := wrappers.Kubelet(s.ctx, []string{ "--kubeconfig", kubeletKubeConfigPath, "--config", kubeletConfigPath, -- GitLab