xetys/hetzner-kube

View on GitHub
cmd/cluster_phase_install_masters.go

Summary

Maintainability
A
0 mins
Test Coverage
package cmd

import (
    "github.com/spf13/cobra"
    "github.com/xetys/hetzner-kube/pkg"
    "github.com/xetys/hetzner-kube/pkg/clustermanager"
    "github.com/xetys/hetzner-kube/pkg/hetzner"
    phases "github.com/xetys/hetzner-kube/pkg/phases"
)

var installMastersPhaseCommand = &cobra.Command{
    Use:   "install-masters <CLUSTER_NAME>",
    Short: "install the control plane",
    Args:  cobra.ExactArgs(1),
    RunE: func(cmd *cobra.Command, args []string) error {
        clusterName := args[0]
        keepCa, _ := cmd.Flags().GetBool("keep-ca")
        keepAll, _ := cmd.Flags().GetBool("keep-all-certs")
        phaseOptions := phases.InstallMastersPhaseOptions{
            KeepCaCerts:  keepCa,
            KeepAllCerts: keepAll,
        }

        _, cluster := AppConf.Config.FindClusterByName(clusterName)
        provider := hetzner.NewHetznerProvider(AppConf.Context, AppConf.Client, *cluster, AppConf.CurrentContext.Token)
        masterNode, err := provider.GetMasterNode()
        if err != nil {
            return err
        }
        err = AppConf.SSHClient.(*clustermanager.SSHCommunicator).CapturePassphrase(masterNode.SSHKeyName)
        if err != nil {
            return err
        }
        coordinator := pkg.NewProgressCoordinator()

        for _, node := range provider.GetAllNodes() {
            steps := 3
            if node.Name == masterNode.Name {
                steps += 4
                if len(provider.GetMasterNodes()) == 1 {
                    steps++
                }
            } else {
                steps += 4
            }
            coordinator.StartProgress(node.Name, steps)
        }

        clusterManager := clustermanager.NewClusterManager(
            provider,
            AppConf.SSHClient,
            coordinator,
            clusterName,
            cluster.HaEnabled,
            cluster.IsolatedEtcd,
            cluster.CloudInitFile,
        )
        phase := phases.NewInstallMastersPhase(clusterManager, phaseOptions)

        if phase.ShouldRun() {
            err := phase.Run()
            if err != nil {
                return err
            }
        }

        for _, node := range provider.GetAllNodes() {
            coordinator.AddEvent(node.Name, pkg.CompletedEvent)
        }

        coordinator.Wait()
        return nil
    },
}

func init() {

    installMastersPhaseCommand.Flags().BoolP("keep-ca", "c", false, "if set, keeps the original ca (if present) during install")
    installMastersPhaseCommand.Flags().BoolP("keep-all-certs", "a", false, "if set, all certificates are saved and reused for install")

    phaseCommand.AddCommand(installMastersPhaseCommand)
}