Port rescue API to v3 Part 2

This patch contains the changes required to adapt the rescue
extension and the corresponding unittest to the v3 framework

Partially implements blueprint nova-v3-api

Change-Id: Iaa6d0cf7708b0887512db952b1e26ccde75d24ef
This commit is contained in:
Chris Yeoh
2013-06-04 21:57:18 +09:30
parent ca29b25a42
commit e3d7f1edf9
5 changed files with 21 additions and 18 deletions
+1
View File
@@ -86,6 +86,7 @@
"compute_extension:quotas:delete": "rule:admin_api",
"compute_extension:quota_classes": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
"compute_extension:security_group_default_rules": "rule:admin_api",
"compute_extension:security_groups": "",
"compute_extension:server_diagnostics": "rule:admin_api",
@@ -19,15 +19,16 @@ import webob
from webob import exc
from nova.api.openstack import common
from nova.api.openstack import extensions as exts
from nova.api.openstack import extensions
from nova.api.openstack import wsgi
from nova import compute
from nova import exception
from nova import utils
ALIAS = "os-rescue"
CONF = cfg.CONF
authorize = exts.extension_authorizer('compute', 'rescue')
authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
class RescueController(wsgi.Controller):
@@ -82,15 +83,18 @@ class RescueController(wsgi.Controller):
return webob.Response(status_int=202)
class Rescue(exts.ExtensionDescriptor):
class Rescue(extensions.V3APIExtensionBase):
"""Instance rescue mode."""
name = "Rescue"
alias = "os-rescue"
namespace = "http://docs.openstack.org/compute/ext/rescue/api/v1.1"
updated = "2011-08-18T00:00:00+00:00"
alias = ALIAS
namespace = "http://docs.openstack.org/compute/ext/rescue/api/v3"
version = 1
def get_resources(self):
return []
def get_controller_extensions(self):
controller = RescueController()
extension = exts.ControllerExtension(self, 'servers', controller)
extension = extensions.ControllerExtension(self, 'servers', controller)
return [extension]
@@ -44,15 +44,11 @@ class RescueTest(test.TestCase):
self.stubs.Set(compute.api.API, "get", fake_compute_get)
self.stubs.Set(compute.api.API, "rescue", rescue)
self.stubs.Set(compute.api.API, "unrescue", unrescue)
self.flags(
osapi_compute_extension=[
'nova.api.openstack.compute.contrib.select_extensions'],
osapi_compute_ext_list=['Rescue'])
self.app = fakes.wsgi_app(init_only=('servers',))
self.app = fakes.wsgi_app_v3(init_only=('servers', 'os-rescue'))
def test_rescue_with_preset_password(self):
body = {"rescue": {"adminPass": "AABBCC112233"}}
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
@@ -64,7 +60,7 @@ class RescueTest(test.TestCase):
def test_rescue_generates_password(self):
body = dict(rescue=None)
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
@@ -81,7 +77,7 @@ class RescueTest(test.TestCase):
raise exception.InstanceInvalidState('fake message')
self.stubs.Set(compute.api.API, "rescue", fake_rescue)
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
@@ -91,7 +87,7 @@ class RescueTest(test.TestCase):
def test_unrescue(self):
body = dict(unrescue=None)
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
@@ -106,7 +102,7 @@ class RescueTest(test.TestCase):
raise exception.InstanceInvalidState('fake message')
self.stubs.Set(compute.api.API, "unrescue", fake_unrescue)
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
@@ -121,7 +117,7 @@ class RescueTest(test.TestCase):
raise exception.InstanceNotRescuable('fake message')
self.stubs.Set(compute.api.API, "rescue", fake_rescue)
req = webob.Request.blank('/v2/fake/servers/test_inst/action')
req = webob.Request.blank('/v3/servers/test_inst/action')
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
+1
View File
@@ -166,6 +166,7 @@ policy_data = """
"compute_extension:quotas:delete": "",
"compute_extension:quota_classes": "",
"compute_extension:rescue": "",
"compute_extension:v3:os-rescue": "",
"compute_extension:security_group_default_rules": "",
"compute_extension:security_groups": "",
"compute_extension:server_diagnostics": "",
+1
View File
@@ -59,6 +59,7 @@ nova.api.v3.extensions =
fixed_ips = nova.api.openstack.compute.plugins.v3.fixed_ips:FixedIPs
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
rescue = nova.api.openstack.compute.plugins.v3.rescue:Rescue
servers = nova.api.openstack.compute.plugins.v3.servers:Servers
nova.api.v3.extensions.server.create =