예제 #1
0
 def _create_server(self,
                    name=None,
                    network=None,
                    wait_on_boot=True,
                    wait_on_delete=True):
     region = CONF.compute.region
     image = CONF.compute.image_ref
     flavor = CONF.compute.flavor_ref
     rs_client = rest_client.RestClient(self.auth_provider, 'compute',
                                        region)
     data = {
         'server': {
             'name': name,
             'imageRef': image,
             'flavorRef': flavor,
             'max_count': 1,
             'min_count': 1,
             'networks': [{
                 'uuid': network
             }]
         }
     }
     data = json.dumps(data)
     (
         resp,
         body,
     ) = rs_client.post('/servers', data)
     rs_client.expected_success(202, resp.status)
     body = json.loads(body)
     server_id = body['server']['id']
     self.wait_for_server_status(server_id, 'ACTIVE')
     return server_id
예제 #2
0
 def setUp(self):
     super(BaseRestClientTestClass, self).setUp()
     self.rest_client = rest_client.RestClient(
         fake_auth_provider.FakeAuthProvider(), None, None)
     self.stubs.Set(httplib2.Http, 'request', self.fake_http.request)
     self.useFixture(mockpatch.PatchObject(self.rest_client,
                                           '_log_request'))
예제 #3
0
 def _delete_server(self, server=None):
     rs_client = rest_client.RestClient(self.auth_provider, 'compute',
                                        'RegionOne')
     (
         resp,
         body,
     ) = rs_client.delete('servers/%s' % str(server))
     self.wait_for_server_termination(server)
     rest_client.ResponseBody(resp, body)
예제 #4
0
 def setUp(self):
     self.fake_http = fake_http.fake_httplib2()
     super(TestProperties, self).setUp()
     creds_dict = {
         'username': '******',
         'user_id': 'test-user_id',
         'tenant_name': 'test-tenant_name',
         'tenant_id': 'test-tenant_id',
         'password': '******'
     }
     self.rest_client = rest_client.RestClient(
         fake_auth_provider.FakeAuthProvider(creds_dict=creds_dict), None,
         None)
예제 #5
0
 def wait_for_server_termination(self, server_id, ignore_error=False):
     """Waits for server to reach termination."""
     build_interval = CONF.boto.build_interval
     while True:
         try:
             rs = rest_client.RestClient(self.auth_provider, 'compute',
                                         'RegionOne')
             (
                 resp,
                 body,
             ) = rs.get('servers/%s' % str(server_id))
             body = json.loads(body)
         except lib_exc.NotFound:
             return
         server_status = body['server']['status']
         if server_status == 'ERROR' and not ignore_error:
             raise exceptions.BuildErrorException(server_id=server_id)
         time.sleep(build_interval)
예제 #6
0
    def wait_for_server_status(self,
                               server_id,
                               status,
                               ready_wait=True,
                               extra_timeout=0,
                               raise_on_error=True):
        """Waits for a server to reach a given status."""
        build_timeout = CONF.compute.build_timeout
        build_interval = CONF.boto.build_interval

        def _get_task_state(body):
            return body.get('OS-EXT-STS:task_state', None)

        rs = rest_client.RestClient(self.auth_provider, "compute", "RegionOne")
        resp, body = rs.get("servers/%s" % str(server_id))
        body = json.loads(body)
        old_status = server_status = body['server']['status']
        old_task_state = task_state = _get_task_state(body)
        start_time = int(time.time())
        timeout = build_timeout + extra_timeout
        while True:
            if status == 'BUILD' and server_status != 'UNKNOWN':
                return
            if server_status == status:
                if ready_wait:
                    if status == 'BUILD':
                        return
                    if str(task_state) == "None":
                        time.sleep(CONF.compute.ready_wait)
                        return
                else:
                    return
            time.sleep(build_interval)
            resp, body = rs.get("servers/%s" % str(server_id))
            body = json.loads(body)
            server_status = body['server']['status']
            task_state = _get_task_state(body)
            if (server_status != old_status) or (task_state != old_task_state):
                oldstatus = '/'.join((old_status, str(old_task_state)))
                serverstatus = '/'.join((server_status, str(task_state)))
                waitsec = (time.time() - start_time)
                LOG.info(
                    _LI('State transtion %(oldstatus)s => %(serverstatus)s'
                        'after %(waitsec)d second wait') % {
                            'oldstatus': oldstatus,
                            'serverstatus': serverstatus,
                            'waitsec': waitsec
                        })
            if (server_status == 'ERROR') and raise_on_error:
                if 'fault' in body:
                    raise exceptions.BuildErrorException(body['fault'],
                                                         server_id=server_id)
                else:
                    raise exceptions.BuildErrorException(server_id=server_id)
            timed_out = int(time.time()) - start_time >= timeout
            if timed_out:
                expected_task_state = 'None' if ready_wait else 'n/a'
                message = ('Server %(server_id)s failed to reach %(status)s '
                           'status and task state "%(expected_task_state)s" '
                           'within the required time (%(timeout)s s).' % {
                               'server_id': server_id,
                               'status': status,
                               'expected_task_state': expected_task_state,
                               'timeout': timeout
                           })
                message += ' Current status: %s.' % server_status
                message += ' Current task state: %s.' % task_state
                caller = misc_utils.find_test_caller()
                if caller:
                    message = '(%s) %s' % (caller, message)
                raise exceptions.TimeoutException(message)
            old_status = server_status
            old_task_state = task_state
예제 #7
0
 def setUp(self):
     super(TestJSONSchemaValidationBase, self).setUp()
     self.fake_auth_provider = fake_auth_provider.FakeAuthProvider()
     self.rest_client = rest_client.RestClient(self.fake_auth_provider,
                                               None, None)
예제 #8
0
 def setUp(self):
     super(TestRestClientErrorCheckerJSON, self).setUp()
     self.rest_client = rest_client.RestClient(
         fake_auth_provider.FakeAuthProvider(), None, None)