コード例 #1
0
 def test_resource_class_url_prefix(self):
     # SCRIPT_NAME represents the mount point of a WSGI
     # application when it is hosted at a path/prefix.
     environ = {'SCRIPT_NAME': '/placement'}
     expected_url = '/placement/resource_classes/CUSTOM_BAREMETAL_GOLD'
     self.assertEqual(expected_url,
                      util.resource_class_url(environ, self.resource_class))
コード例 #2
0
ファイル: resource_class.py プロジェクト: pavera/placement
def create_resource_class(req):
    """POST to create a resource class.

    On success return a 201 response with an empty body and a location
    header pointing to the newly created resource class.
    """
    context = req.environ['placement.context']
    context.can(policies.CREATE)
    data = util.extract_json(req.body, schema.POST_RC_SCHEMA_V1_2)

    try:
        rc = rc_obj.ResourceClass(context, name=data['name'])
        rc.create()
    except exception.ResourceClassExists:
        raise webob.exc.HTTPConflict(
            'Conflicting resource class already exists: %(name)s' %
            {'name': data['name']})
    except exception.MaxDBRetriesExceeded:
        raise webob.exc.HTTPConflict(
            'Max retries of DB transaction exceeded attempting '
            'to create resource class: %(name)s, please '
            'try again.' % {'name': data['name']})

    req.response.location = util.resource_class_url(req.environ, rc)
    req.response.status = 201
    req.response.content_type = None
    return req.response
コード例 #3
0
ファイル: resource_class.py プロジェクト: pavera/placement
def update_resource_class(req):
    """PUT to create or validate the existence of single resource class.

    On a successful create return 201. Return 204 if the class already
    exists. If the resource class is not a custom resource class, return
    a 400. 409 might be a better choice, but 400 aligns with previous code.
    """
    name = util.wsgi_path_item(req.environ, 'name')
    context = req.environ['placement.context']
    context.can(policies.UPDATE)

    # Use JSON validation to validation resource class name.
    util.extract_json('{"name": "%s"}' % name, schema.PUT_RC_SCHEMA_V1_2)

    status = 204
    try:
        rc = rc_obj.ResourceClass.get_by_name(context, name)
    except exception.NotFound:
        try:
            rc = rc_obj.ResourceClass(context, name=name)
            rc.create()
            status = 201
        # We will not see ResourceClassCannotUpdateStandard because
        # that was already caught when validating the {name}.
        except exception.ResourceClassExists:
            # Someone just now created the class, so stick with 204
            pass

    req.response.status = status
    req.response.content_type = None
    req.response.location = util.resource_class_url(req.environ, rc)
    return req.response
コード例 #4
0
 def test_resource_class_url(self):
     environ = {}
     expected_url = '/resource_classes/CUSTOM_BAREMETAL_GOLD'
     self.assertEqual(expected_url,
                      util.resource_class_url(environ, self.resource_class))
コード例 #5
0
ファイル: resource_class.py プロジェクト: pavera/placement
def _serialize_links(environ, rc):
    url = util.resource_class_url(environ, rc)
    links = [{'rel': 'self', 'href': url}]
    return links