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 08b914ee6567..bc7588156a20 100644 --- a/setup.cfg +++ b/setup.cfg @@ -76,7 +76,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