in cmd/nodeadm/init/init.go [58:110]
func (c *initCmd) Run(log *zap.Logger, opts *cli.GlobalOptions) error {
ctx := context.Background()
ctx = logger.NewContext(ctx, log)
log.Info("Checking user is root..")
root, err := cli.IsRunningAsRoot()
if err != nil {
return err
} else if !root {
return cli.ErrMustRunAsRoot
}
if c.configSource == "" {
flaggy.ShowHelpAndExit("--config-source is a required flag. The format is a URI with supported schemes: [file, imds]." +
" For example on hybrid nodes --config-source file://nodeConfig.yaml")
}
if !slices.Contains(c.skipPhases, installValidation) {
log.Info("Loading installed components")
_, err = tracker.GetInstalledArtifacts()
if err != nil && os.IsNotExist(err) {
log.Info("Nodeadm components are not installed. Please run `nodeadm install` before running init")
return nil
} else if err != nil {
return err
}
if err := containerd.ValidateSystemdUnitFile(); err != nil {
return fmt.Errorf("a systemd unit file for containerd is required to init the node: %w", err)
}
}
// Check if either of cilium or calico vxlan port are open
if !slices.Contains(c.skipPhases, cniPortCheckValidation) {
log.Info("Validating firewall ports for cilium and calico")
if err := validateFirewallOpenPorts(); err != nil {
return fmt.Errorf("Cilium (%s/%s) or Calico (%s/%s) VxLan ports are not open on the host. If you are not using VxLan, this validation can by bypassed with --skip %s",
ciliumVxLanPort, vxLanProtocol, calicoVxLanPort, vxLanProtocol, cniPortCheckValidation)
}
}
nodeProvider, err := node.NewNodeProvider(c.configSource, c.skipPhases, log)
if err != nil {
return err
}
initer := &flows.Initer{
NodeProvider: nodeProvider,
SkipPhases: c.skipPhases,
Logger: log,
}
return initer.Run(ctx)
}