code: func runPreflight(c workflow.RunData) error {
  	data, ok := c.(InitData)
  	if !ok {
  		return errors.New("preflight phase invoked with an invalid data struct")
  	}
  
  	fmt.Println("[preflight] Running pre-flight checks")
  	if err := preflight.RunInitNodeChecks(utilsexec.New(), data.Cfg(), data.IgnorePreflightErrors(), false, false); err != nil {
  		return err
  	}
  
  	if !data.DryRun() {
  		fmt.Println("[preflight] Pulling images required for setting up a Kubernetes cluster")
  		fmt.Println("[preflight] This might take a minute or two, depending on the speed of your internet connection")
  		fmt.Println("[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'")
  		if err := preflight.RunPullImagesCheck(utilsexec.New(), data.Cfg(), data.IgnorePreflightErrors()); err != nil {
  			return err
  		}
  	} else {
  		fmt.Println("[preflight] Would pull the required images (like 'kubeadm config images pull')")
  	}
  
  	return nil
  }
docs: // runPreflight executes preflight checks logic.