예제 #1
0
    def test_lease_delete(self):
        lease_resource = self._create_resource('lease', self.rsrc_defn,
                                               self.stack)
        self.client.lease.delete.return_value = None

        scheduler.TaskRunner(lease_resource.create)()
        self.client.lease.get.side_effect = [
            'lease_obj',
            client_exception.BlazarClientException(code=404)
        ]
        scheduler.TaskRunner(lease_resource.delete)()
        self.assertEqual((lease_resource.DELETE, lease_resource.COMPLETE),
                         lease_resource.state)
        self.assertEqual(1, self.client.lease.delete.call_count)
예제 #2
0
    def request(self, url, method, **kwargs):
        resp, body = super(SessionClient, self).request(url,
                                                        method,
                                                        raise_exc=False,
                                                        **kwargs)

        if resp.status_code >= 400:
            if body is not None:
                error_message = body.get('error_message', body)
            else:
                error_message = resp.text

            msg = _("ERROR: {0}").format(error_message)
            raise exception.BlazarClientException(msg, code=resp.status_code)

        return resp, body
예제 #3
0
def _find_resource_id_by_name(client, resource, name):
    resource_manager = getattr(client, resource)
    resources = resource_manager.list()

    named_resources = []

    for resource in resources:
        if resource['name'] == name:
            named_resources.append(resource['id'])
    if len(named_resources) > 1:
        raise exception.NoUniqueMatch(message="There are more than one "
                                      "appropriate resources for the "
                                      "name '%s' and type '%s'" %
                                      (name, resource))
    elif named_resources:
        return named_resources[0]
    else:
        message = "Unable to find resource with name '%s'" % name
        raise exception.BlazarClientException(message=message, status_code=404)
예제 #4
0
    def request(self, url, method, **kwargs):
        """Base request method.

        Adds specific headers and URL prefix to the request.

        :param url: Resource URL.
        :type url: str

        :param method: Method to be called (GET, POST, PUT, DELETE).
        :type method: str

        :returns: Response and body.
        :rtype: tuple
        """
        kwargs.setdefault('headers', kwargs.get('headers', {}))
        kwargs['headers']['User-Agent'] = self.user_agent
        kwargs['headers']['Accept'] = 'application/json'
        kwargs['headers']['x-auth-token'] = self.auth_token

        if 'body' in kwargs:
            kwargs['headers']['Content-Type'] = 'application/json'
            kwargs['data'] = jsonutils.dump_as_bytes(kwargs['body'])
            del kwargs['body']

        resp = requests.request(method, self.blazar_url + url, **kwargs)

        try:
            body = jsonutils.loads(resp.text)
        except ValueError:
            body = None

        if resp.status_code >= 400:
            if body is not None:
                error_message = body.get('error_message', body)
            else:
                error_message = resp.text

            body = _("ERROR: {0}").format(error_message)
            raise exception.BlazarClientException(body, code=resp.status_code)

        return resp, body