Use plain routes list for server-metadata endpoint instead of stevedore

This patch adds server-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: I88ca06d63016ffd1e38b61e6de0b75f88ecdb138
This commit is contained in:
Kevin_Zheng 2017-05-02 16:56:45 +08:00 committed by Zhenyu Zheng
parent d6d5c6be0c
commit f41acdd57e
4 changed files with 19 additions and 38 deletions

View File

@ -203,7 +203,10 @@ hardcoded_extensions = [
'alias': 'os-flavor-access'},
{'name': 'Keypairs',
'description': 'Keypair Support.',
'alias': 'os-keypairs'}
'alias': 'os-keypairs'},
{'name': 'ServerMetadata',
'description': 'Server metadata Support.',
'alias': 'server-metadata'},
]

View File

@ -45,6 +45,7 @@ from nova.api.openstack.compute import pause_server
from nova.api.openstack.compute import remote_consoles
from nova.api.openstack.compute import rescue
from nova.api.openstack.compute import security_groups
from nova.api.openstack.compute import server_metadata
from nova.api.openstack.compute import server_usage
from nova.api.openstack.compute import servers
from nova.api.openstack.compute import shelve
@ -135,6 +136,9 @@ server_controller = functools.partial(_create_controller,
)
server_metadata_controller = functools.partial(_create_controller,
server_metadata.ServerMetadataController, [], [])
# NOTE(alex_xu): This is structure of this route list as below:
# (
# ('Route path': {
@ -228,7 +232,17 @@ ROUTE_LIST = (
}),
('/servers/{id}/action', {
'POST': [server_controller, 'action']
})
}),
('/servers/{server_id}/metadata', {
'GET': [server_metadata_controller, 'index'],
'POST': [server_metadata_controller, 'create'],
'PUT': [server_metadata_controller, 'update_all'],
}),
('/servers/{server_id}/metadata/{id}', {
'GET': [server_metadata_controller, 'show'],
'PUT': [server_metadata_controller, 'update'],
'DELETE': [server_metadata_controller, 'delete'],
}),
)

View File

@ -26,8 +26,6 @@ from nova import exception
from nova.i18n import _
from nova.policies import server_metadata as sm_policies
ALIAS = 'server-metadata'
class ServerMetadataController(wsgi.Controller):
"""The server metadata API controller for the OpenStack API."""
@ -163,36 +161,3 @@ class ServerMetadataController(wsgi.Controller):
except exception.InstanceInvalidState as state_error:
common.raise_http_conflict_for_instance_invalid_state(state_error,
'delete metadata', server_id)
class ServerMetadata(extensions.V21APIExtensionBase):
"""Server Metadata API."""
name = "ServerMetadata"
alias = ALIAS
version = 1
def get_resources(self):
parent = {'member_name': 'server',
'collection_name': 'servers'}
resources = [extensions.ResourceExtension('metadata',
ServerMetadataController(),
member_name='server_meta',
parent=parent,
custom_routes_fn=
self.server_metadata_map
)]
return resources
def get_controller_extensions(self):
return []
def server_metadata_map(self, mapper, wsgi_resource):
mapper.connect("metadata",
"/{project_id}/servers/{server_id}/metadata",
controller=wsgi_resource,
action='update_all', conditions={"method": ['PUT']})
# Also connect the non project_id routes
mapper.connect("metadata",
"/servers/{server_id}/metadata",
controller=wsgi_resource,
action='update_all', conditions={"method": ['PUT']})

View File

@ -110,7 +110,6 @@ nova.api.v21.extensions =
security_groups = nova.api.openstack.compute.security_groups:SecurityGroups
server_diagnostics = nova.api.openstack.compute.server_diagnostics:ServerDiagnostics
server_external_events = nova.api.openstack.compute.server_external_events:ServerExternalEvents
server_metadata = nova.api.openstack.compute.server_metadata:ServerMetadata
server_migrations = nova.api.openstack.compute.server_migrations:ServerMigrations
server_password = nova.api.openstack.compute.server_password:ServerPassword
server_tags = nova.api.openstack.compute.server_tags:ServerTags