From f41acdd57ecd2c9fc607bb52c2e75d5705e3eee6 Mon Sep 17 00:00:00 2001 From: Kevin_Zheng Date: Tue, 2 May 2017 16:56:45 +0800 Subject: [PATCH] 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 --- nova/api/openstack/compute/extension_info.py | 5 ++- nova/api/openstack/compute/routes.py | 16 ++++++++- nova/api/openstack/compute/server_metadata.py | 35 ------------------- setup.cfg | 1 - 4 files changed, 19 insertions(+), 38 deletions(-) diff --git a/nova/api/openstack/compute/extension_info.py b/nova/api/openstack/compute/extension_info.py index ec32e17a4e..ee6c6e6b1f 100644 --- a/nova/api/openstack/compute/extension_info.py +++ b/nova/api/openstack/compute/extension_info.py @@ -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'}, ] diff --git a/nova/api/openstack/compute/routes.py b/nova/api/openstack/compute/routes.py index 75b2241cf4..3c9083ce62 100644 --- a/nova/api/openstack/compute/routes.py +++ b/nova/api/openstack/compute/routes.py @@ -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'], + }), ) diff --git a/nova/api/openstack/compute/server_metadata.py b/nova/api/openstack/compute/server_metadata.py index a88d43a883..543a34da09 100644 --- a/nova/api/openstack/compute/server_metadata.py +++ b/nova/api/openstack/compute/server_metadata.py @@ -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']}) diff --git a/setup.cfg b/setup.cfg index 507955b5d3..ea3e88e08b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -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