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:
@@ -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"
|
||||
|
||||
@@ -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": "",
|
||||
|
||||
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user