docs: def _connect_minion(self, minion):
          '''
          Create a minion, and asynchronously connect it to a master
          '''
          auth_wait = minion.opts['acceptance_wait_time']
          failed = False
          while True:
              if failed:
                  if auth_wait < self.max_auth_wait:
                      auth_wait += self.auth_wait
                  log.debug(
                      "sleeping before reconnect attempt to %s [%d/%d]",
                     minion.opts['master'],
                      auth_wait,
                      self.max_auth_wait,
                  )
                  yield tornado.gen.sleep(auth_wait)  # TODO: log?
              try:
                  if minion.opts.get('beacons_before_connect', False):
                      minion.setup_beacons(before_connect=True)
                  if minion.opts.get('scheduler_before_connect', False):
                      minion.setup_scheduler(before_connect=True)
                  yield minion.connect_master(failed=failed)
                  minion.tune_in(start=False)
                  self.minions.append(minion)
                  break
              except SaltClientError as exc:
                  failed = True
                  log.error(
                      'Error while bringing up minion for multi-master. Is '
                      'master at %s responding?', minion.opts['master']
                  )
              except SaltMasterUnresolvableError:
                  err = 'Master address: \'{0}\' could not be resolved. Invalid or unresolveable address. ' \
                        'Set \'master\' value in minion config.'.format(minion.opts['master'])
                  log.error(err)
                  break
              except Exception as e:
                  failed = True
                  log.critical(
                      'Unexpected error while connecting to %s',
                      minion.opts['master'], exc_info=True
                  )