diff options
-rw-r--r-- | etc/nova/policy.json | 1 | ||||
-rw-r--r-- | nova/api/openstack/compute/plugins/v3/evacuate.py | 20 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/plugins/v3/test_evacuate.py | 24 | ||||
-rw-r--r-- | nova/tests/fake_policy.py | 1 | ||||
-rw-r--r-- | setup.cfg | 1 |
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": "", @@ -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 |