code: func (c *Cluster) Start() error {
  	root := filepath.Join(c.config.Root, swarmDirName)
  
  	nodeConfig, err := loadPersistentState(root)
  	if err != nil {
  		if os.IsNotExist(err) {
  			return nil
  		}
  		return err
  	}
  
  	nr, err := c.newNodeRunner(*nodeConfig)
  	if err != nil {
  		return err
  	}
  	c.nr = nr
  
  	select {
  	case <-time.After(swarmConnectTimeout):
  		logrus.Error("swarm component could not be started before timeout was reached")
  	case err := <-nr.Ready():
  		if err != nil {
  			logrus.WithError(err).Error("swarm component could not be started")
  			return nil
  		}
  	}
  	return nil
  }
docs: // Start the Cluster instance
  // TODO The split between New and Start can be join again when the SendClusterEvent
  // method is no longer required