Added some ctl boilerplate

This commit is contained in:
2026-03-27 18:34:53 +08:00
parent bf85462e34
commit 87aa1d4b0b
30 changed files with 1813 additions and 19 deletions

View File

@@ -0,0 +1,64 @@
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{
MgmtIface: ctx.Config.Spec.Network.ManagementIface,
MgmtAddress: ctx.Config.Spec.Network.ManagementCIDR,
MgmtGateway: ctx.Config.Spec.Network.ManagementGW,
}
return &Registry{
steps: map[string]node.Step{
"check_prereqs": node.CheckPrereqs,
"validate_network_requirements": node.ValidateNetworkRequirements,
"install_cni_if_requested": node.InstallCNIIfRequested,
"start_crio": node.StartCRIO,
"check_crio_running": node.CheckCRIORunning,
"wait_for_existing_cluster_if_needed": node.WaitForExistingClusterIfNeeded,
"decide_bootstrap_action": node.DecideBootstrapAction,
"check_required_images": node.CheckRequiredImages,
"generate_kubeadm_config": node.GenerateKubeadmConfig,
"run_kubeadm_init": node.RunKubeadmInit,
"restart_kubelet": node.RestartKubelet,
"apply_local_node_metadata_if_possible": node.ApplyLocalNodeMetadataIfPossible,
"allow_single_node_scheduling": node.AllowSingleNodeScheduling,
"ensure_ip_forward": node.EnsureIPForward,
"configure_mgmt_interface": node.ConfigureMgmtInterface(netCfg),
"configure_dns": node.ConfigureDNS,
"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
}

View File

@@ -0,0 +1,58 @@
package bootstrap
import (
"context"
monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
"undecided.project/monok8s/pkg/node"
"undecided.project/monok8s/pkg/system"
)
type Runner struct {
NodeCtx *node.NodeContext
Registry *Registry
}
func NewRunner(cfg *monov1alpha1.MonoKSConfig) *Runner {
runnerCfg := system.RunnerConfig{}
nctx := &node.NodeContext{
Config: cfg,
System: system.NewRunner(runnerCfg),
}
return &Runner{
NodeCtx: nctx,
Registry: NewRegistry(nctx),
}
}
func (r *Runner) Init(ctx context.Context) error {
for _, name := range []string{
"check_prereqs",
"validate_network_requirements",
"install_cni_if_requested",
"start_crio",
"check_crio_running",
"wait_for_existing_cluster_if_needed",
"decide_bootstrap_action",
"check_required_images",
"generate_kubeadm_config",
"run_kubeadm_init",
"restart_kubelet",
"apply_local_node_metadata_if_possible",
"allow_single_node_scheduling",
"print_summary",
} {
if err := r.RunNamedStep(ctx, name); err != nil {
return err
}
}
return nil
}
func (r *Runner) RunNamedStep(ctx context.Context, name string) error {
step, err := r.Registry.Get(name)
if err != nil {
return err
}
return step(ctx, r.NodeCtx)
}