penguin/monok8s

k8s image for Mono Gateway Dev Kit

clitools/pkg/bootstrap/registry.go

raw ยท 2537 bytes

package bootstrap

import (
	"fmt"

	"undecided.project/monok8s/pkg/node"
)

type Registry struct {
	steps map[string]node.Step
}

func NewRegistry(ctx *node.NodeContext) *Registry {
	netCfg := node.NetworkConfig{
		Hostname:         ctx.Config.Spec.Network.Hostname,
		MgmtIface:        ctx.Config.Spec.Network.ManagementIface,
		MgmtAddress:      ctx.Config.Spec.Network.ManagementCIDR,
		MgmtGateway:      ctx.Config.Spec.Network.ManagementGW,
		DNSNameservers:   ctx.Config.Spec.Network.DNSNameservers,
		DNSSearchDomains: ctx.Config.Spec.Network.DNSSearchDomains,
	}

	return &Registry{
		steps: map[string]node.Step{
			"validate_network_requirements":         node.ValidateNetworkRequirements,
			"detect_local_cluster_state":            node.DetectLocalClusterState,
			"configure_default_cni":                 node.ConfigureDefaultCNI,
			"start_crio":                            node.StartCRIO,
			"wait_for_existing_cluster_if_needed":   node.WaitForExistingClusterIfNeeded,
			"validate_required_images":              node.ValidateRequiredImagesPresent,
			"generate_kubeadm_config":               node.GenerateKubeadmConfig,
			"run_kubeadm_init":                      node.RunKubeadmInit,
			"apply_local_node_metadata_if_possible": node.ApplyLocalNodeMetadataIfPossible,
			"allow_single_node_scheduling":          node.AllowSingleNodeScheduling,
			"ensure_ip_forward":                     node.EnsureIPForward,
			"configure_hostname":                    node.ConfigureHostname(netCfg),
			"configure_mgmt_interface":              node.ConfigureMgmtInterface(netCfg),
			"configure_dns":                         node.ConfigureDNS(netCfg),
			"set_hostname_if_needed":                node.SetHostnameIfNeeded,
			"print_summary":                         node.PrintSummary,
			"reconcile_control_plane":               node.ReconcileControlPlane,
			"check_upgrade_prereqs":                 node.CheckUpgradePrereqs,
			"run_kubeadm_upgrade_apply":             node.RunKubeadmUpgradeApply,
			"run_kubeadm_join":                      node.RunKubeadmJoin,
			"reconcile_node":                        node.ReconcileNode,
			"run_kubeadm_upgrade_node":              node.RunKubeadmUpgradeNode,
		},
	}
}

func (r *Registry) MustGet(name string) node.Step {
	step, ok := r.steps[name]
	if !ok {
		panic(fmt.Sprintf("unknown step %q", name))
	}
	return step
}

func (r *Registry) Get(name string) (node.Step, error) {
	step, ok := r.steps[name]
	if !ok {
		return nil, fmt.Errorf("unknown step %q", name)
	}
	return step, nil
}