summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-08-03 13:11:52 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2012-08-04 14:54:51 -0700
commit7aefc22f1e5ec6b272d89e6ed8343604ee96472a (patch)
treee30b127a9b0adcaa4ad5c0a3f6c63423f13a7de8 /nova/api
parent80aa9f54d7935c21ae06da1d2b7292844beb5274 (diff)
downloadnova-7aefc22f1e5ec6b272d89e6ed8343604ee96472a.tar.gz
nova-7aefc22f1e5ec6b272d89e6ed8343604ee96472a.tar.xz
nova-7aefc22f1e5ec6b272d89e6ed8343604ee96472a.zip
Allow loaded extensions to be checked from servers
related to blueprint disable-server-extensions Adds an is_loaded method to the extension manager and passes the extension manager to the servers controller so that it can be used to enable optional post parameters. The extension manager is also saved in ExtensionDescriptors because they may need access to it if they are subclassing the servers Controller. Tests are included to verify that extension loading can be properly determined. Change-Id: Ie4effbb885370dc80d86ee13d27c9263f7f63cad
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/__init__.py4
-rw-r--r--nova/api/openstack/compute/__init__.py4
-rw-r--r--nova/api/openstack/compute/contrib/config_drive.py2
-rw-r--r--nova/api/openstack/compute/contrib/createserverext.py2
-rw-r--r--nova/api/openstack/compute/contrib/keypairs.py2
-rw-r--r--nova/api/openstack/compute/contrib/volumes.py4
-rw-r--r--nova/api/openstack/compute/servers.py7
-rw-r--r--nova/api/openstack/extensions.py4
-rw-r--r--nova/api/openstack/volume/__init__.py2
9 files changed, 18 insertions, 13 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index a5274e03b..e84353df9 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -122,7 +122,7 @@ class APIRouter(base_wsgi.Router):
mapper = ProjectMapper()
self.resources = {}
- self._setup_routes(mapper)
+ self._setup_routes(mapper, ext_mgr)
self._setup_ext_routes(mapper, ext_mgr)
self._setup_extensions(ext_mgr)
super(APIRouter, self).__init__(mapper)
@@ -166,5 +166,5 @@ class APIRouter(base_wsgi.Router):
resource.register_actions(controller)
resource.register_extensions(controller)
- def _setup_routes(self, mapper):
+ def _setup_routes(self, mapper, ext_mgr):
raise NotImplementedError
diff --git a/nova/api/openstack/compute/__init__.py b/nova/api/openstack/compute/__init__.py
index 081290b10..70ec80dc2 100644
--- a/nova/api/openstack/compute/__init__.py
+++ b/nova/api/openstack/compute/__init__.py
@@ -53,7 +53,7 @@ class APIRouter(nova.api.openstack.APIRouter):
"""
ExtensionManager = extensions.ExtensionManager
- def _setup_routes(self, mapper):
+ def _setup_routes(self, mapper, ext_mgr):
self.resources['versions'] = versions.create_resource()
mapper.connect("versions", "/",
controller=self.resources['versions'],
@@ -67,7 +67,7 @@ class APIRouter(nova.api.openstack.APIRouter):
parent_resource=dict(member_name='server',
collection_name='servers'))
- self.resources['servers'] = servers.create_resource()
+ self.resources['servers'] = servers.create_resource(ext_mgr)
mapper.resource("server", "servers",
controller=self.resources['servers'],
collection={'detail': 'GET'},
diff --git a/nova/api/openstack/compute/contrib/config_drive.py b/nova/api/openstack/compute/contrib/config_drive.py
index 3ec2c3db4..779aad539 100644
--- a/nova/api/openstack/compute/contrib/config_drive.py
+++ b/nova/api/openstack/compute/contrib/config_drive.py
@@ -82,6 +82,6 @@ class Config_drive(extensions.ExtensionDescriptor):
updated = "2012-07-16T00:00:00+00:00"
def get_controller_extensions(self):
- controller = Controller()
+ controller = Controller(self.ext_mgr)
extension = extensions.ControllerExtension(self, 'servers', controller)
return [extension]
diff --git a/nova/api/openstack/compute/contrib/createserverext.py b/nova/api/openstack/compute/contrib/createserverext.py
index 08407aaca..ebb24e559 100644
--- a/nova/api/openstack/compute/contrib/createserverext.py
+++ b/nova/api/openstack/compute/contrib/createserverext.py
@@ -55,7 +55,7 @@ class Createserverext(extensions.ExtensionDescriptor):
def get_resources(self):
resources = []
- controller = Controller()
+ controller = Controller(self.ext_mgr)
res = extensions.ResourceExtension('os-create-server-ext',
controller=controller)
diff --git a/nova/api/openstack/compute/contrib/keypairs.py b/nova/api/openstack/compute/contrib/keypairs.py
index c3f9c69ef..db503ffdd 100644
--- a/nova/api/openstack/compute/contrib/keypairs.py
+++ b/nova/api/openstack/compute/contrib/keypairs.py
@@ -190,6 +190,6 @@ class Keypairs(extensions.ExtensionDescriptor):
return resources
def get_controller_extensions(self):
- controller = Controller()
+ controller = Controller(self.ext_mgr)
extension = extensions.ControllerExtension(self, 'servers', controller)
return [extension]
diff --git a/nova/api/openstack/compute/contrib/volumes.py b/nova/api/openstack/compute/contrib/volumes.py
index 085f8d7c5..1f231d600 100644
--- a/nova/api/openstack/compute/contrib/volumes.py
+++ b/nova/api/openstack/compute/contrib/volumes.py
@@ -597,8 +597,8 @@ class Volumes(extensions.ExtensionDescriptor):
collection_name='servers'))
resources.append(res)
- res = extensions.ResourceExtension('os-volumes_boot',
- BootFromVolumeController())
+ controller = BootFromVolumeController(self.ext_mgr)
+ res = extensions.ResourceExtension('os-volumes_boot', controller)
resources.append(res)
res = extensions.ResourceExtension('os-snapshots',
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 0b37b5c57..e71f2bcea 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -360,9 +360,10 @@ class Controller(wsgi.Controller):
# Convenience return
return robj
- def __init__(self, **kwargs):
+ def __init__(self, ext_mgr=None, **kwargs):
super(Controller, self).__init__(**kwargs)
self.compute_api = compute.API()
+ self.ext_mgr = ext_mgr
@wsgi.serializers(xml=MinimalServersTemplate)
def index(self, req):
@@ -1160,8 +1161,8 @@ class Controller(wsgi.Controller):
'changes-since')
-def create_resource():
- return wsgi.Resource(Controller())
+def create_resource(ext_mgr):
+ return wsgi.Resource(Controller(ext_mgr))
def remove_invalid_options(context, search_options, allowed_search_options):
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index 5d5c750a2..da2157ad8 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -63,6 +63,7 @@ class ExtensionDescriptor(object):
"""Register extension with the extension manager."""
ext_mgr.register(self)
+ self.ext_mgr = ext_mgr
def get_resources(self):
"""List of extensions.ResourceExtension extension objects.
@@ -179,6 +180,9 @@ class ExtensionManager(object):
"""
+ def is_loaded(self, alias):
+ return alias in self.extensions
+
def register(self, ext):
# Do nothing if the extension doesn't check out
if not self._check_extension(ext):
diff --git a/nova/api/openstack/volume/__init__.py b/nova/api/openstack/volume/__init__.py
index 3e6f731e1..092ce6c5d 100644
--- a/nova/api/openstack/volume/__init__.py
+++ b/nova/api/openstack/volume/__init__.py
@@ -39,7 +39,7 @@ class APIRouter(nova.api.openstack.APIRouter):
"""
ExtensionManager = extensions.ExtensionManager
- def _setup_routes(self, mapper):
+ def _setup_routes(self, mapper, ext_mgr):
self.resources['versions'] = versions.create_resource()
mapper.connect("versions", "/",
controller=self.resources['versions'],