def delete_inventories(req): """DELETE all inventory for a resource provider. Delete inventory as required to reset all the inventory. If an inventory to be deleted is in use, return a 409 Conflict. On success return a 204 No content. Return 405 Method Not Allowed if the wanted microversion does not match. """ microversion.raise_http_status_code_if_not_version(req, 405, (1, 5)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid(context, uuid) inventories = objects.InventoryList(objects=[]) try: resource_provider.set_inventory(inventories) except exception.ConcurrentUpdateDetected: raise webob.exc.HTTPConflict( _('Unable to delete inventory for resource provider ' '%(rp_uuid)s because the inventory was updated by ' 'another process. Please retry your request.') % {'rp_uuid': resource_provider.uuid}) except exception.InventoryInUse: raise webob.exc.HTTPConflict( _('Unable to delete inventory for resource provider ' '%(rp_uuid)s because the inventory is in use.') % {'rp_uuid': resource_provider.uuid}) response = req.response response.status = 204 response.content_type = None return response
def delete_inventories(req): """DELETE all inventory for a resource provider. Delete inventory as required to reset all the inventory. If an inventory to be deleted is in use, return a 409 Conflict. On success return a 204 No content. Return 405 Method Not Allowed if the wanted microversion does not match. """ microversion.raise_http_status_code_if_not_version(req, 405, (1, 5)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid( context, uuid) inventories = objects.InventoryList(objects=[]) try: resource_provider.set_inventory(inventories) except (exception.ConcurrentUpdateDetected, exception.InventoryInUse) as exc: raise webob.exc.HTTPConflict( _('update conflict: %(error)s') % {'error': exc}) response = req.response response.status = 204 response.content_type = None return response
def delete_inventories(req): """DELETE all inventory for a resource provider. Delete inventory as required to reset all the inventory. If an inventory to be deleted is in use, return a 409 Conflict. On success return a 204 No content. Return 405 Method Not Allowed if the wanted microversion does not match. """ microversion.raise_http_status_code_if_not_version(req, 405, (1, 5)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = rp_obj.ResourceProvider.get_by_uuid( context, uuid) inventories = rp_obj.InventoryList(objects=[]) try: resource_provider.set_inventory(inventories) except exception.ConcurrentUpdateDetected: raise webob.exc.HTTPConflict( _('Unable to delete inventory for resource provider ' '%(rp_uuid)s because the inventory was updated by ' 'another process. Please retry your request.') % {'rp_uuid': resource_provider.uuid}) except exception.InventoryInUse as ex: # NOTE(mriedem): This message cannot change without impacting the # nova.scheduler.client.report._RE_INV_IN_USE regex. raise webob.exc.HTTPConflict(explanation=ex.format_message()) response = req.response response.status = 204 response.content_type = None return response
def set_aggregates(req): microversion.raise_http_status_code_if_not_version(req, 404, (1, 1)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid(context, uuid) aggregate_uuids = util.extract_json(req.body, PUT_AGGREGATES_SCHEMA) resource_provider.set_aggregates(aggregate_uuids) return _send_aggregates(req.response, aggregate_uuids)
def set_aggregates(req): microversion.raise_http_status_code_if_not_version(req, 404, (1, 1)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid( context, uuid) aggregate_uuids = util.extract_json(req.body, PUT_AGGREGATES_SCHEMA) resource_provider.set_aggregates(aggregate_uuids) return _send_aggregates(req.response, aggregate_uuids)
def get_aggregates(req): """GET a list of aggregates associated with a resource provider. If the resource provider does not exist return a 404. On success return a 200 with an application/json body containing a list of aggregate uuids. """ microversion.raise_http_status_code_if_not_version(req, 404, (1, 1)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid(context, uuid) aggregate_uuids = resource_provider.get_aggregates() return _send_aggregates(req.response, aggregate_uuids)
def get_aggregates(req): """GET a list of aggregates associated with a resource provider. If the resource provider does not exist return a 404. On success return a 200 with an application/json body containing a list of aggregate uuids. """ microversion.raise_http_status_code_if_not_version(req, 404, (1, 1)) context = req.environ['placement.context'] uuid = util.wsgi_path_item(req.environ, 'uuid') resource_provider = objects.ResourceProvider.get_by_uuid( context, uuid) aggregate_uuids = resource_provider.get_aggregates() return _send_aggregates(req.response, aggregate_uuids)