code: func (e *Runner) Run(args []string) error {
  	e.prepareForExecution()
  
  	// determine which phase should be run according to RunnerOptions
  	phaseRunFlags, err := e.computePhaseRunFlags()
  	if err != nil {
  		return err
  	}
  
  	// builds the runner data
  	var data RunData
  	if data, err = e.InitData(args); err != nil {
  		return err
  	}
  
  	err = e.visitAll(func(p *phaseRunner) error {
  		// if the phase should not be run, skip the phase.
  		if run, ok := phaseRunFlags[p.generatedName]; !run || !ok {
  			return nil
  		}
  
  		// Errors if phases that are meant to create special subcommands only
  		// are wrongly assigned Run Methods
  		if p.RunAllSiblings && (p.RunIf != nil || p.Run != nil) {
  			return errors.Wrapf(err, "phase marked as RunAllSiblings can not have Run functions %s", p.generatedName)
  		}
  
  		// If the phase defines a condition to be checked before executing the phase action.
  		if p.RunIf != nil {
  			// Check the condition and returns if the condition isn't satisfied (or fails)
  			ok, err := p.RunIf(data)
  			if err != nil {
  				return errors.Wrapf(err, "error execution run condition for phase %s", p.generatedName)
  			}
  
  			if !ok {
  				return nil
  			}
  		}
  
  		// Runs the phase action (if defined)
  		if p.Run != nil {
  			if err := p.Run(data); err != nil {
  				return errors.Wrapf(err, "error execution phase %s", p.generatedName)
  			}
  		}
  
  		return nil
  	})
  
  	return err
  }
docs: // Run the kubeadm composable kubeadm workflows.