From 92c9975bd2d53624ae595b895c2e96991ee43778 Mon Sep 17 00:00:00 2001 From: ivan-zhu Date: Mon, 15 Jul 2013 17:26:25 +0800 Subject: [PATCH] port BaremetalNodes API into v3 part2 This patch contains the changes required to adapt the BaremetalNodes extension and the corresponding unittest to the v3 framework Change-Id: Iceef736a3821a4628afc34be29a04766421d3e47 --- etc/nova/policy.json | 1 + .../compute/plugins/v3/baremetal_nodes.py | 29 +++++++++++-------- .../plugins/v3/test_baremetal_nodes.py | 2 +- nova/tests/fake_policy.py | 1 + setup.cfg | 1 + 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/etc/nova/policy.json b/etc/nova/policy.json index ed5fdd424152..ce2e93e03771 100644 --- a/etc/nova/policy.json +++ b/etc/nova/policy.json @@ -51,6 +51,7 @@ "compute_extension:attach_interfaces": "", "compute_extension:v3:os-attach-interfaces": "", "compute_extension:baremetal_nodes": "rule:admin_api", + "compute_extension:v3:os-baremetal-nodes": "rule:admin_api", "compute_extension:cells": "rule:admin_api", "compute_extension:v3:os-cells": "rule:admin_api", "compute_extension:certificates": "", diff --git a/nova/api/openstack/compute/plugins/v3/baremetal_nodes.py b/nova/api/openstack/compute/plugins/v3/baremetal_nodes.py index 2f2ddc35b8d9..8642b166972f 100644 --- a/nova/api/openstack/compute/plugins/v3/baremetal_nodes.py +++ b/nova/api/openstack/compute/plugins/v3/baremetal_nodes.py @@ -23,7 +23,9 @@ from nova.api.openstack import xmlutil from nova import exception from nova.virt.baremetal import db -authorize = extensions.extension_authorizer('compute', 'baremetal_nodes') +ALIAS = 'os-baremetal-nodes' +authorize = extensions.extension_authorizer('compute', + 'v3:' + ALIAS) node_fields = ['id', 'cpus', 'local_gb', 'memory_mb', 'pm_address', 'pm_user', @@ -115,8 +117,8 @@ class BareMetalNodeController(wsgi.Controller): authorize(context) try: node = db.bm_node_get(context, id) - except exception.NodeNotFound: - raise webob.exc.HTTPNotFound() + except exception.NodeNotFound as e: + raise webob.exc.HTTPNotFound(explanation=e.format_message()) try: ifs = db.bm_interface_get_all_by_bm_node_id(context, id) except exception.NodeNotFound: @@ -150,15 +152,15 @@ class BareMetalNodeController(wsgi.Controller): authorize(context) try: db.bm_node_destroy(context, id) - except exception.NodeNotFound: - raise webob.exc.HTTPNotFound() + except exception.NodeNotFound as e: + raise webob.exc.HTTPNotFound(explanation=e.format_message()) return webob.Response(status_int=202) def _check_node_exists(self, context, node_id): try: db.bm_node_get(context, node_id) - except exception.NodeNotFound: - raise webob.exc.HTTPNotFound() + except exception.NodeNotFound as e: + raise webob.exc.HTTPNotFound(explanation=e.format_message()) @wsgi.serializers(xml=InterfaceTemplate) @wsgi.action('add_interface') @@ -201,18 +203,21 @@ class BareMetalNodeController(wsgi.Controller): raise webob.exc.HTTPNotFound() -class Baremetal_nodes(extensions.ExtensionDescriptor): +class BaremetalNodes(extensions.V3APIExtensionBase): """Admin-only bare-metal node administration.""" name = "BareMetalNodes" - alias = "os-baremetal-nodes" - namespace = "http://docs.openstack.org/compute/ext/baremetal_nodes/api/v2" - updated = "2013-01-04T00:00:00+00:00" + alias = ALIAS + namespace = "http://docs.openstack.org/compute/ext/baremetal_nodes/api/v3" + version = 1 def get_resources(self): resources = [] - res = extensions.ResourceExtension('os-baremetal-nodes', + res = extensions.ResourceExtension(ALIAS, BareMetalNodeController(), member_actions={"action": "POST", }) resources.append(res) return resources + + def get_controller_extensions(self): + return [] diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_baremetal_nodes.py b/nova/tests/api/openstack/compute/plugins/v3/test_baremetal_nodes.py index 23d06cad20d5..5b9f85118227 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_baremetal_nodes.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_baremetal_nodes.py @@ -15,7 +15,7 @@ from webob import exc -from nova.api.openstack.compute.contrib import baremetal_nodes +from nova.api.openstack.compute.plugins.v3 import baremetal_nodes from nova import context from nova import exception from nova import test diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py index 691b031e0daf..84d70613b76d 100644 --- a/nova/tests/fake_policy.py +++ b/nova/tests/fake_policy.py @@ -129,6 +129,7 @@ policy_data = """ "compute_extension:attach_interfaces": "", "compute_extension:v3:os-attach-interfaces": "", "compute_extension:baremetal_nodes": "", + "compute_extension:v3:os-baremetal-nodes": "", "compute_extension:cells": "", "compute_extension:v3:os-cells": "", "compute_extension:certificates": "", diff --git a/setup.cfg b/setup.cfg index 1a4eda74b549..6f1eedfd7101 100644 --- a/setup.cfg +++ b/setup.cfg @@ -59,6 +59,7 @@ nova.api.v3.extensions = aggregates = nova.api.openstack.compute.plugins.v3.aggregates:Aggregates attach_interfaces = nova.api.openstack.compute.plugins.v3.attach_interfaces:AttachInterfaces availability_zone = nova.api.openstack.compute.plugins.v3.availability_zone:AvailabilityZone + baremetal_nodes = nova.api.openstack.compute.plugins.v3.baremetal_nodes:BaremetalNodes cells = nova.api.openstack.compute.plugins.v3.cells:Cells certificates = nova.api.openstack.compute.plugins.v3.certificates:Certificates config_drive = nova.api.openstack.compute.plugins.v3.config_drive:ConfigDrive