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
This commit is contained in:
He Jie Xu 2017-06-28 21:05:02 +08:00
parent d0093c5cc3
commit 25e9b0129a
3 changed files with 16 additions and 36 deletions

View File

@ -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']})

View File

@ -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']
}),

View File

@ -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