From 25e9b0129a823587cef0d7c7a8f6ba7b7806c72f Mon Sep 17 00:00:00 2001 From: He Jie Xu Date: Wed, 28 Jun 2017 21:05:02 +0800 Subject: [PATCH] Use plain routes list for image-metadata instead of stevedore This patch adds image-metadata related routes by a plain list, instead of using stevedore. After all the Nova API endpoints moves to the plain routes list, the usage of stevedore for API loading will be removed from Nova. Partial-implement-blueprint api-no-more-extensions-pike Change-Id: I466d2e1693f56ee32fa32fd74789f88c1d0a1f7c --- nova/api/openstack/compute/image_metadata.py | 35 -------------------- nova/api/openstack/compute/routes.py | 16 +++++++++ setup.cfg | 1 - 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/nova/api/openstack/compute/image_metadata.py b/nova/api/openstack/compute/image_metadata.py index 7e4100e2a697..b66e82dd22f2 100644 --- a/nova/api/openstack/compute/image_metadata.py +++ b/nova/api/openstack/compute/image_metadata.py @@ -27,8 +27,6 @@ from nova import exception from nova.i18n import _ import nova.image -ALIAS = 'image-metadata' - class ImageMetadataController(wsgi.Controller): """The image metadata API controller for the OpenStack API.""" @@ -134,36 +132,3 @@ class ImageMetadataController(wsgi.Controller): purge_props=True) except exception.ImageNotAuthorized as e: raise exc.HTTPForbidden(explanation=e.format_message()) - - -class ImageMetadata(extensions.V21APIExtensionBase): - """Image Metadata API.""" - name = "ImageMetadata" - alias = ALIAS - version = 1 - - def get_resources(self): - parent = {'member_name': 'image', - 'collection_name': 'images'} - resources = [extensions.ResourceExtension('metadata', - ImageMetadataController(), - member_name='image_meta', - parent=parent, - custom_routes_fn= - self.image_metadata_map - )] - return resources - - def get_controller_extensions(self): - return [] - - def image_metadata_map(self, mapper, wsgi_resource): - mapper.connect("metadata", - "/{project_id}/images/{image_id}/metadata", - controller=wsgi_resource, - action='update_all', conditions={"method": ['PUT']}) - # Also connect the non project_id route - mapper.connect("metadata", - "/images/{image_id}/metadata", - controller=wsgi_resource, - action='update_all', conditions={"method": ['PUT']}) diff --git a/nova/api/openstack/compute/routes.py b/nova/api/openstack/compute/routes.py index 661904624300..f1a0355a744d 100644 --- a/nova/api/openstack/compute/routes.py +++ b/nova/api/openstack/compute/routes.py @@ -53,6 +53,7 @@ from nova.api.openstack.compute import fping from nova.api.openstack.compute import hide_server_addresses from nova.api.openstack.compute import hosts from nova.api.openstack.compute import hypervisors +from nova.api.openstack.compute import image_metadata from nova.api.openstack.compute import image_size from nova.api.openstack.compute import images from nova.api.openstack.compute import instance_actions @@ -202,6 +203,11 @@ images_controller = functools.partial( [image_size.ImageSizeController], []) +image_metadata_controller = functools.partial( + _create_controller, image_metadata.ImageMetadataController, + [], []) + + instance_actions_controller = functools.partial(_create_controller, instance_actions.InstanceActionsController, [], []) @@ -391,6 +397,16 @@ ROUTE_LIST = ( 'GET': [images_controller, 'show'], 'DELETE': [images_controller, 'delete'] }), + ('/images/{image_id}/metadata', { + 'GET': [image_metadata_controller, 'index'], + 'POST': [image_metadata_controller, 'create'], + 'PUT': [image_metadata_controller, 'update_all'] + }), + ('/images/{image_id}/metadata/{id}', { + 'GET': [image_metadata_controller, 'show'], + 'PUT': [image_metadata_controller, 'update'], + 'DELETE': [image_metadata_controller, 'delete'] + }), ('/limits', { 'GET': [limits_controller, 'index'] }), diff --git a/setup.cfg b/setup.cfg index 6c02201d5a84..f7cdfe658fe7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -74,7 +74,6 @@ wsgi_scripts = nova.api.v21.extensions = baremetal_nodes = nova.api.openstack.compute.baremetal_nodes:BareMetalNodes extension_info = nova.api.openstack.compute.extension_info:ExtensionInfo - image_metadata = nova.api.openstack.compute.image_metadata:ImageMetadata security_group_default_rules = nova.api.openstack.compute.security_group_default_rules:SecurityGroupDefaultRules security_groups = nova.api.openstack.compute.security_groups:SecurityGroups versions = nova.api.openstack.compute.versionsV21:Versions