summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-02-08 21:49:21 +0000
committerGerrit Code Review <review@openstack.org>2012-02-08 21:49:21 +0000
commit85ae58c21fc9019dfef5585accd53bdc667debde (patch)
treec43f1078698315be9b769d7c59c69e45367d9b98
parent082750832e6ad45200016845334de08ff76d2d67 (diff)
parentfdd92c4ad987407dae96ab46a36e0db407ded718 (diff)
downloadnova-85ae58c21fc9019dfef5585accd53bdc667debde.tar.gz
nova-85ae58c21fc9019dfef5585accd53bdc667debde.tar.xz
nova-85ae58c21fc9019dfef5585accd53bdc667debde.zip
Merge "Added ability to load specific extensions."
-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
-rw-r--r--nova/flags.py10
4 files changed, 35 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)
diff --git a/nova/flags.py b/nova/flags.py
index de352c2d6..85e031d45 100644
--- a/nova/flags.py
+++ b/nova/flags.py
@@ -313,11 +313,21 @@ global_opts = [
cfg.StrOpt('ec2_path',
default='/services/Cloud',
help='suffix for ec2'),
+ cfg.ListOpt('osapi_compute_ext_list',
+ default=[],
+ help='Specify list of extensions to load when using osapi_'
+ 'compute_extension option with nova.api.openstack.'
+ 'compute.contrib.select_extensions'),
cfg.MultiStrOpt('osapi_compute_extension',
default=[
'nova.api.openstack.compute.contrib.standard_extensions'
],
help='osapi compute extension to load'),
+ cfg.ListOpt('osapi_volume_ext_list',
+ default=[],
+ help='Specify list of extensions to load when using osapi_'
+ 'volume_extension option with nova.api.openstack.'
+ 'volume.contrib.select_extensions'),
cfg.MultiStrOpt('osapi_volume_extension',
default=[
'nova.api.openstack.volume.contrib.standard_extensions'