예제 #1
0
    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()
예제 #2
0
def device(mock_con, request):
    dev = Device(args['target'], no_probe=True, no_gather_facts=True)
    dev.facts = request.param
    return dev