def wait_for_device(self, countdown, poll_delay): dev = None # first we need to wait for the device to be 'reachable' via the API. # we'll use the probe error to detect if it is or not while not dev: msg = 'reload-countdown at: {} seconds'.format(countdown) self.post_device_status(message=msg, state='AWAIT-ONLINE') self.log.info(msg) try: dev = Device(self.target, user=self.user, passwd=self.passwd, timeout=poll_delay) except CommandError: # this means that the device is probe-able, but unable to use the API # for some reason; likely the process is not yet ready. need to # 'manually' invoke the poll delay. countdown -= poll_delay if countdown <= 0: errmsg = 'Failed to access %s device API within reload countdown' % self.target self.exit_results(results=dict(ok=False, error_type='login', message=errmsg), exit_error=errmsg) time.sleep(poll_delay) except ProbeError: countdown -= poll_delay if countdown <= 0: errmsg = 'Failed to probe target %s within reload countdown' % self.target self.exit_results(results=dict(ok=False, error_type='login', message=errmsg), exit_error=errmsg) except UnauthorizedError: errmsg = 'Unauthorized - check user/password' self.exit_results(results=dict(ok=False, error_type='login', message=errmsg), exit_error=errmsg) self.dev = dev self.post_device_facts()
def device(mock_con, request): dev = Device(args['target'], no_probe=True, no_gather_facts=True) dev.facts = request.param return dev