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
                )
Create a minion, and asynchronously connect it to a master