summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-25 23:53:52 +0000
committerGerrit Code Review <review@openstack.org>2012-10-25 23:53:52 +0000
commit79a2d058ca7ebcd3f9f25194c1bc6e26b1a001a3 (patch)
treee4450a60608e5581abea360b6f88013dce216fc6
parentb0529de679056935a48b6a1e9879765ffdc1799b (diff)
parent1de51ef1a3b423967d6e2de8b71fd2a811e644a5 (diff)
Merge "Allow loading only selected extensions"
-rw-r--r--nova/api/openstack/__init__.py11
-rw-r--r--nova/api/openstack/compute/__init__.py132
-rw-r--r--nova/api/openstack/volume/__init__.py40
-rw-r--r--nova/tests/api/openstack/fakes.py4
4 files changed, 103 insertions, 84 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index ada6024cf..d27b018c2 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -118,7 +118,7 @@ class APIRouter(base_wsgi.Router):
"""Simple paste factory, :class:`nova.wsgi.Router` doesn't have one"""
return cls()
- def __init__(self, ext_mgr=None):
+ def __init__(self, ext_mgr=None, init_only=None):
if ext_mgr is None:
if self.ExtensionManager:
ext_mgr = self.ExtensionManager()
@@ -127,16 +127,19 @@ class APIRouter(base_wsgi.Router):
mapper = ProjectMapper()
self.resources = {}
- self._setup_routes(mapper, ext_mgr)
- self._setup_ext_routes(mapper, ext_mgr)
+ self._setup_routes(mapper, ext_mgr, init_only)
+ self._setup_ext_routes(mapper, ext_mgr, init_only)
self._setup_extensions(ext_mgr)
super(APIRouter, self).__init__(mapper)
- def _setup_ext_routes(self, mapper, ext_mgr):
+ def _setup_ext_routes(self, mapper, ext_mgr, init_only):
for resource in ext_mgr.get_resources():
LOG.debug(_('Extended resource: %s'),
resource.collection)
+ if init_only is not None and resource.collection not in init_only:
+ continue
+
inherits = None
if resource.inherits:
inherits = self.resources.get(resource.inherits)
diff --git a/nova/api/openstack/compute/__init__.py b/nova/api/openstack/compute/__init__.py
index 9bf36bf25..4af679ffb 100644
--- a/nova/api/openstack/compute/__init__.py
+++ b/nova/api/openstack/compute/__init__.py
@@ -53,69 +53,81 @@ class APIRouter(nova.api.openstack.APIRouter):
"""
ExtensionManager = extensions.ExtensionManager
- def _setup_routes(self, mapper, ext_mgr):
- self.resources['versions'] = versions.create_resource()
- mapper.connect("versions", "/",
- controller=self.resources['versions'],
- action='show')
+ def _setup_routes(self, mapper, ext_mgr, init_only):
+ if init_only is None or 'versions' in init_only:
+ self.resources['versions'] = versions.create_resource()
+ mapper.connect("versions", "/",
+ controller=self.resources['versions'],
+ action='show')
mapper.redirect("", "/")
- self.resources['consoles'] = consoles.create_resource()
- mapper.resource("console", "consoles",
- controller=self.resources['consoles'],
- parent_resource=dict(member_name='server',
- collection_name='servers'))
-
- self.resources['servers'] = servers.create_resource(ext_mgr)
- mapper.resource("server", "servers",
- controller=self.resources['servers'],
- collection={'detail': 'GET'},
- member={'action': 'POST'})
-
- self.resources['ips'] = ips.create_resource()
- mapper.resource("ip", "ips", controller=self.resources['ips'],
- parent_resource=dict(member_name='server',
- collection_name='servers'))
-
- self.resources['images'] = images.create_resource()
- mapper.resource("image", "images",
- controller=self.resources['images'],
- collection={'detail': 'GET'})
-
- self.resources['limits'] = limits.create_resource()
- mapper.resource("limit", "limits",
- controller=self.resources['limits'])
-
- self.resources['flavors'] = flavors.create_resource()
- mapper.resource("flavor", "flavors",
- controller=self.resources['flavors'],
- collection={'detail': 'GET'},
- member={'action': 'POST'})
-
- self.resources['image_metadata'] = image_metadata.create_resource()
- image_metadata_controller = self.resources['image_metadata']
-
- mapper.resource("image_meta", "metadata",
- controller=image_metadata_controller,
- parent_resource=dict(member_name='image',
- collection_name='images'))
-
- mapper.connect("metadata", "/{project_id}/images/{image_id}/metadata",
- controller=image_metadata_controller,
- action='update_all',
- conditions={"method": ['PUT']})
-
- self.resources['server_metadata'] = server_metadata.create_resource()
- server_metadata_controller = self.resources['server_metadata']
-
- mapper.resource("server_meta", "metadata",
- controller=server_metadata_controller,
+ if init_only is None or 'consoles' in init_only:
+ self.resources['consoles'] = consoles.create_resource()
+ mapper.resource("console", "consoles",
+ controller=self.resources['consoles'],
parent_resource=dict(member_name='server',
collection_name='servers'))
- mapper.connect("metadata",
- "/{project_id}/servers/{server_id}/metadata",
- controller=server_metadata_controller,
- action='update_all',
- conditions={"method": ['PUT']})
+ if init_only is None or 'consoles' in init_only or \
+ 'servers' in init_only or ips in init_only:
+ self.resources['servers'] = servers.create_resource(ext_mgr)
+ mapper.resource("server", "servers",
+ controller=self.resources['servers'],
+ collection={'detail': 'GET'},
+ member={'action': 'POST'})
+
+ if init_only is None or 'ips' in init_only:
+ self.resources['ips'] = ips.create_resource()
+ mapper.resource("ip", "ips", controller=self.resources['ips'],
+ parent_resource=dict(member_name='server',
+ collection_name='servers'))
+
+ if init_only is None or 'images' in init_only:
+ self.resources['images'] = images.create_resource()
+ mapper.resource("image", "images",
+ controller=self.resources['images'],
+ collection={'detail': 'GET'})
+
+ if init_only is None or 'limits' in init_only:
+ self.resources['limits'] = limits.create_resource()
+ mapper.resource("limit", "limits",
+ controller=self.resources['limits'])
+
+ if init_only is None or 'flavors' in init_only:
+ self.resources['flavors'] = flavors.create_resource()
+ mapper.resource("flavor", "flavors",
+ controller=self.resources['flavors'],
+ collection={'detail': 'GET'},
+ member={'action': 'POST'})
+
+ if init_only is None or 'image_metadata' in init_only:
+ self.resources['image_metadata'] = image_metadata.create_resource()
+ image_metadata_controller = self.resources['image_metadata']
+
+ mapper.resource("image_meta", "metadata",
+ controller=image_metadata_controller,
+ parent_resource=dict(member_name='image',
+ collection_name='images'))
+
+ mapper.connect("metadata",
+ "/{project_id}/images/{image_id}/metadata",
+ controller=image_metadata_controller,
+ action='update_all',
+ conditions={"method": ['PUT']})
+
+ if init_only is None or 'server_metadata' in init_only:
+ self.resources['server_metadata'] = \
+ server_metadata.create_resource()
+ server_metadata_controller = self.resources['server_metadata']
+
+ mapper.resource("server_meta", "metadata",
+ controller=server_metadata_controller,
+ parent_resource=dict(member_name='server',
+ collection_name='servers'))
+
+ mapper.connect("metadata",
+ "/{project_id}/servers/{server_id}/metadata",
+ controller=server_metadata_controller,
+ action='update_all',
+ conditions={"method": ['PUT']})
diff --git a/nova/api/openstack/volume/__init__.py b/nova/api/openstack/volume/__init__.py
index cc161416c..3aca5bebf 100644
--- a/nova/api/openstack/volume/__init__.py
+++ b/nova/api/openstack/volume/__init__.py
@@ -39,26 +39,30 @@ class APIRouter(nova.api.openstack.APIRouter):
"""
ExtensionManager = extensions.ExtensionManager
- def _setup_routes(self, mapper, ext_mgr):
- self.resources['versions'] = versions.create_resource()
- mapper.connect("versions", "/",
- controller=self.resources['versions'],
- action='show')
+ def _setup_routes(self, mapper, ext_mgr, init_only):
+ if init_only is None or 'versions' in init_only:
+ self.resources['versions'] = versions.create_resource()
+ mapper.connect("versions", "/",
+ controller=self.resources['versions'],
+ action='show')
mapper.redirect("", "/")
- self.resources['volumes'] = volumes.create_resource(ext_mgr)
- mapper.resource("volume", "volumes",
- controller=self.resources['volumes'],
- collection={'detail': 'GET'},
- member={'action': 'POST'})
+ if init_only is None or 'volumes' in init_only:
+ self.resources['volumes'] = volumes.create_resource(ext_mgr)
+ mapper.resource("volume", "volumes",
+ controller=self.resources['volumes'],
+ collection={'detail': 'GET'},
+ member={'action': 'POST'})
- self.resources['types'] = types.create_resource()
- mapper.resource("type", "types",
- controller=self.resources['types'])
+ if init_only is None or 'types' in init_only:
+ self.resources['types'] = types.create_resource()
+ mapper.resource("type", "types",
+ controller=self.resources['types'])
- self.resources['snapshots'] = snapshots.create_resource(ext_mgr)
- mapper.resource("snapshot", "snapshots",
- controller=self.resources['snapshots'],
- collection={'detail': 'GET'},
- member={'action': 'POST'})
+ if init_only is None or 'snapshots' in init_only:
+ self.resources['snapshots'] = snapshots.create_resource(ext_mgr)
+ mapper.resource("snapshot", "snapshots",
+ controller=self.resources['snapshots'],
+ collection={'detail': 'GET'},
+ member={'action': 'POST'})
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index dc83447e4..58dc2df45 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -78,9 +78,9 @@ def fake_wsgi(self, req):
def wsgi_app(inner_app_v2=None, fake_auth_context=None,
- use_no_auth=False, ext_mgr=None):
+ use_no_auth=False, ext_mgr=None, init_only=None):
if not inner_app_v2:
- inner_app_v2 = compute.APIRouter(ext_mgr)
+ inner_app_v2 = compute.APIRouter(ext_mgr, init_only)
if use_no_auth:
api_v2 = openstack_api.FaultWrapper(auth.NoAuthMiddleware(