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