diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-10-25 23:53:52 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-10-25 23:53:52 +0000 |
| commit | 79a2d058ca7ebcd3f9f25194c1bc6e26b1a001a3 (patch) | |
| tree | e4450a60608e5581abea360b6f88013dce216fc6 /nova/api | |
| parent | b0529de679056935a48b6a1e9879765ffdc1799b (diff) | |
| parent | 1de51ef1a3b423967d6e2de8b71fd2a811e644a5 (diff) | |
Merge "Allow loading only selected extensions"
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/__init__.py | 11 | ||||
| -rw-r--r-- | nova/api/openstack/compute/__init__.py | 132 | ||||
| -rw-r--r-- | nova/api/openstack/volume/__init__.py | 40 |
3 files changed, 101 insertions, 82 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'}) |
