diff options
author | Brian Lamar <brian.lamar@rackspace.com> | 2012-02-08 15:29:02 -0500 |
---|---|---|
committer | Brian Lamar <brian.lamar@rackspace.com> | 2012-02-08 16:08:02 -0500 |
commit | fdd92c4ad987407dae96ab46a36e0db407ded718 (patch) | |
tree | 6df94882683b2ce426d8af0b4c2844cee868767a /nova/api | |
parent | 799713e4db7f55ccc6acaa033fa082075e28a6a9 (diff) | |
download | nova-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__.py | 7 | ||||
-rw-r--r-- | nova/api/openstack/extensions.py | 17 | ||||
-rw-r--r-- | nova/api/openstack/volume/contrib/__init__.py | 7 |
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) |