summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/nova/policy.json1
-rw-r--r--nova/api/openstack/compute/plugins/v3/evacuate.py20
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py24
-rw-r--r--nova/tests/fake_policy.py1
-rw-r--r--setup.cfg1
5 files changed, 27 insertions, 20 deletions
diff --git a/etc/nova/policy.json b/etc/nova/policy.json
index f33feb689..e1921d786 100644
--- a/etc/nova/policy.json
+++ b/etc/nova/policy.json
@@ -43,6 +43,7 @@
"compute_extension:deferred_delete": "",
"compute_extension:disk_config": "",
"compute_extension:evacuate": "rule:admin_api",
+ "compute_extension:v3:os-evacuate": "rule:admin_api",
"compute_extension:extended_server_attributes": "rule:admin_api",
"compute_extension:extended_status": "",
"compute_extension:extended_availability_zone": "",
diff --git a/nova/api/openstack/compute/plugins/v3/evacuate.py b/nova/api/openstack/compute/plugins/v3/evacuate.py
index 7eee99ed1..86e90e03e 100644
--- a/nova/api/openstack/compute/plugins/v3/evacuate.py
+++ b/nova/api/openstack/compute/plugins/v3/evacuate.py
@@ -25,12 +25,13 @@ from nova.openstack.common import strutils
from nova import utils
LOG = logging.getLogger(__name__)
-authorize = extensions.extension_authorizer('compute', 'evacuate')
+ALIAS = "os-evacuate"
+authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
-class Controller(wsgi.Controller):
+class EvacuateController(wsgi.Controller):
def __init__(self, *args, **kwargs):
- super(Controller, self).__init__(*args, **kwargs)
+ super(EvacuateController, self).__init__(*args, **kwargs)
self.compute_api = compute.API()
@wsgi.action('evacuate')
@@ -83,15 +84,18 @@ class Controller(wsgi.Controller):
return {'adminPass': password}
-class Evacuate(extensions.ExtensionDescriptor):
+class Evacuate(extensions.V3APIExtensionBase):
"""Enables server evacuation."""
name = "Evacuate"
- alias = "os-evacuate"
- namespace = "http://docs.openstack.org/compute/ext/evacuate/api/v2"
- updated = "2013-01-06T00:00:00+00:00"
+ alias = ALIAS
+ namespace = "http://docs.openstack.org/compute/ext/evacuate/api/v3"
+ version = 1
+
+ def get_resources(self):
+ return []
def get_controller_extensions(self):
- controller = Controller()
+ controller = EvacuateController()
extension = extensions.ControllerExtension(self, 'servers', controller)
return [extension]
diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py b/nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py
index 816bac565..a9ad80ea5 100644
--- a/nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py
+++ b/nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py
@@ -57,8 +57,8 @@ class EvacuateTest(test.TestCase):
ctxt.user_id = 'fake'
ctxt.project_id = 'fake'
ctxt.is_admin = True
- app = fakes.wsgi_app(fake_auth_context=ctxt)
- req = webob.Request.blank('/v2/fake/servers/%s/action' % self.UUID)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
+ req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
@@ -75,9 +75,9 @@ class EvacuateTest(test.TestCase):
ctxt.user_id = 'fake'
ctxt.project_id = 'fake'
ctxt.is_admin = True
- app = fakes.wsgi_app(fake_auth_context=ctxt)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
uuid = self.UUID
- req = webob.Request.blank('/v2/fake/servers/%s/action' % uuid)
+ req = webob.Request.blank('/v3/servers/%s/action' % uuid)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
@@ -104,9 +104,9 @@ class EvacuateTest(test.TestCase):
ctxt.user_id = 'fake'
ctxt.project_id = 'fake'
ctxt.is_admin = True
- app = fakes.wsgi_app(fake_auth_context=ctxt)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
uuid = self.UUID
- req = webob.Request.blank('/v2/fake/servers/%s/action' % uuid)
+ req = webob.Request.blank('/v3/servers/%s/action' % uuid)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
@@ -131,9 +131,9 @@ class EvacuateTest(test.TestCase):
ctxt.user_id = 'fake'
ctxt.project_id = 'fake'
ctxt.is_admin = True
- app = fakes.wsgi_app(fake_auth_context=ctxt)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
uuid = self.UUID
- req = webob.Request.blank('/v2/fake/servers/%s/action' % uuid)
+ req = webob.Request.blank('/v3/servers/%s/action' % uuid)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
@@ -160,9 +160,9 @@ class EvacuateTest(test.TestCase):
ctxt.user_id = 'fake'
ctxt.project_id = 'fake'
ctxt.is_admin = True
- app = fakes.wsgi_app(fake_auth_context=ctxt)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
uuid = self.UUID
- req = webob.Request.blank('/v2/fake/servers/%s/action' % uuid)
+ req = webob.Request.blank('/v3/servers/%s/action' % uuid)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
@@ -183,9 +183,9 @@ class EvacuateTest(test.TestCase):
def test_not_admin(self):
ctxt = context.RequestContext('fake', 'fake', is_admin=False)
- app = fakes.wsgi_app(fake_auth_context=ctxt)
+ app = fakes.wsgi_app_v3(fake_auth_context=ctxt)
uuid = self.UUID
- req = webob.Request.blank('/v2/fake/servers/%s/action' % uuid)
+ req = webob.Request.blank('/v3/servers/%s/action' % uuid)
req.method = 'POST'
req.body = jsonutils.dumps({
'evacuate': {
diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py
index 0ccbd368b..39ec57465 100644
--- a/nova/tests/fake_policy.py
+++ b/nova/tests/fake_policy.py
@@ -122,6 +122,7 @@ policy_data = """
"compute_extension:deferred_delete": "",
"compute_extension:disk_config": "",
"compute_extension:evacuate": "is_admin:True",
+ "compute_extension:v3:os-evacuate": "is_admin:True",
"compute_extension:extended_server_attributes": "",
"compute_extension:extended_status": "",
"compute_extension:extended_availability_zone": "",
diff --git a/setup.cfg b/setup.cfg
index 1baa22940..84972c73f 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -55,6 +55,7 @@ console_scripts =
nova.api.v3.extensions =
consoles = nova.api.openstack.compute.plugins.v3.consoles:Consoles
+ evacuate = nova.api.openstack.compute.plugins.v3.evacuate:Evacuate
extension_info = nova.api.openstack.compute.plugins.v3.extension_info:ExtensionInfo
fixed_ips = nova.api.openstack.compute.plugins.v3.fixed_ips:FixedIPs
ips = nova.api.openstack.compute.plugins.v3.ips:IPs