diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-08 21:49:21 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-08 21:49:21 +0000 |
| commit | 85ae58c21fc9019dfef5585accd53bdc667debde (patch) | |
| tree | c43f1078698315be9b769d7c59c69e45367d9b98 | |
| parent | 082750832e6ad45200016845334de08ff76d2d67 (diff) | |
| parent | fdd92c4ad987407dae96ab46a36e0db407ded718 (diff) | |
| download | nova-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__.py | 7 | ||||
| -rw-r--r-- | nova/api/openstack/extensions.py | 17 | ||||
| -rw-r--r-- | nova/api/openstack/volume/contrib/__init__.py | 7 | ||||
| -rw-r--r-- | nova/flags.py | 10 |
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' |
