summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorBrian Lamar <brian.lamar@rackspace.com>2012-02-08 15:29:02 -0500
committerBrian Lamar <brian.lamar@rackspace.com>2012-02-08 16:08:02 -0500
commitfdd92c4ad987407dae96ab46a36e0db407ded718 (patch)
tree6df94882683b2ce426d8af0b4c2844cee868767a /nova/api
parent799713e4db7f55ccc6acaa033fa082075e28a6a9 (diff)
downloadnova-fdd92c4ad987407dae96ab46a36e0db407ded718.tar.gz
nova-fdd92c4ad987407dae96ab46a36e0db407ded718.tar.xz
nova-fdd92c4ad987407dae96ab46a36e0db407ded718.zip
Added ability to load specific extensions.
For example, the following nova.conf configuration file: --osapi_compute_extension=nova.api.openstack.compute.contrib.select_extensions --osapi_compute_ext_list=Createserverext,Extended_status Would load only the Createserverext and Extended_status extensions. Change-Id: I8c2a444683c6e4114875827b44ef01e457eb94ac
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/contrib/__init__.py7
-rw-r--r--nova/api/openstack/extensions.py17
-rw-r--r--nova/api/openstack/volume/contrib/__init__.py7
3 files changed, 25 insertions, 6 deletions
diff --git a/nova/api/openstack/compute/contrib/__init__.py b/nova/api/openstack/compute/contrib/__init__.py
index 2713a82f4..eaa9557af 100644
--- a/nova/api/openstack/compute/contrib/__init__.py
+++ b/nova/api/openstack/compute/contrib/__init__.py
@@ -21,12 +21,19 @@ It can't be called 'extensions' because that causes namespacing problems.
"""
+from nova import flags
from nova import log as logging
from nova.api.openstack import extensions
+FLAGS = flags.FLAGS
LOG = logging.getLogger('nova.api.openstack.compute.contrib')
def standard_extensions(ext_mgr):
extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__)
+
+
+def select_extensions(ext_mgr):
+ extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__,
+ FLAGS.osapi_compute_ext_list)
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index b55c05d7c..33cd0bf57 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -309,7 +309,7 @@ def wrap_errors(fn):
return wrapped
-def load_standard_extensions(ext_mgr, logger, path, package):
+def load_standard_extensions(ext_mgr, logger, path, package, ext_list=None):
"""Registers all standard API extensions."""
# Walk through all the modules in our directory...
@@ -331,13 +331,18 @@ def load_standard_extensions(ext_mgr, logger, path, package):
continue
# Try loading it
- classname = ("%s%s.%s.%s%s" %
- (package, relpkg, root,
- root[0].upper(), root[1:]))
+ classname = "%s%s" % (root[0].upper(), root[1:])
+ classpath = ("%s%s.%s.%s" %
+ (package, relpkg, root, classname))
+
+ if ext_list is not None and classname not in ext_list:
+ logger.debug("Skipping extension: %s" % classpath)
+ continue
+
try:
- ext_mgr.load_extension(classname)
+ ext_mgr.load_extension(classpath)
except Exception as exc:
- logger.warn(_('Failed to load extension %(classname)s: '
+ logger.warn(_('Failed to load extension %(classpath)s: '
'%(exc)s') % locals())
# Now, let's consider any subdirectories we may have...
diff --git a/nova/api/openstack/volume/contrib/__init__.py b/nova/api/openstack/volume/contrib/__init__.py
index 58c0413ab..01b585c69 100644
--- a/nova/api/openstack/volume/contrib/__init__.py
+++ b/nova/api/openstack/volume/contrib/__init__.py
@@ -21,12 +21,19 @@ It can't be called 'extensions' because that causes namespacing problems.
"""
+from nova import flags
from nova import log as logging
from nova.api.openstack import extensions
+FLAGS = flags.FLAGS
LOG = logging.getLogger('nova.api.openstack.volume.contrib')
def standard_extensions(ext_mgr):
extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__)
+
+
+def select_extensions(ext_mgr):
+ extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__,
+ FLAGS.osapi_volume_ext_list)