diff options
4 files changed, 13 insertions, 15 deletions
diff --git a/doc/api_samples/os-multiple-create/multiple-create-post-resp.xml b/doc/api_samples/os-multiple-create/multiple-create-post-resp.xml index 84a400061..8db4ac2eb 100644 --- a/doc/api_samples/os-multiple-create/multiple-create-post-resp.xml +++ b/doc/api_samples/os-multiple-create/multiple-create-post-resp.xml @@ -1,4 +1,2 @@ <?xml version='1.0' encoding='UTF-8'?> -<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" reservation_id="r-yk2p005y"> - <metadata/> -</server>
\ No newline at end of file +<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" reservation_id="r-fq0lg4za"/>
\ No newline at end of file diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 3464cfdbd..c21599300 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -134,6 +134,13 @@ class ServerAdminPassTemplate(xmlutil.TemplateBuilder): return xmlutil.SlaveTemplate(root, 1, nsmap=server_nsmap) +class ServerMultipleCreateTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('server') + root.set('reservation_id') + return xmlutil.MasterTemplate(root, 1, nsmap=server_nsmap) + + def FullServerTemplate(): master = ServerTemplate() master.attach(ServerAdminPassTemplate()) @@ -917,14 +924,9 @@ class Controller(wsgi.Controller): # Let the caller deal with unhandled exceptions. # If the caller wanted a reservation_id, return it - - # NOTE(treinish): XML serialization will not work without a root - # selector of 'server' however JSON return is not expecting a server - # field/object - if ret_resv_id and (req.get_content_type() == 'application/xml'): - return {'server': {'reservation_id': resv_id}} - elif ret_resv_id: - return {'reservation_id': resv_id} + if ret_resv_id: + return wsgi.ResponseObject({'reservation_id': resv_id}, + xml=ServerMultipleCreateTemplate) req.cache_db_instances(instances) server = self._view_builder.create(req, instances[0]) diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py index 638ef79b0..e1c88b6f8 100644 --- a/nova/tests/api/openstack/compute/test_servers.py +++ b/nova/tests/api/openstack/compute/test_servers.py @@ -1988,7 +1988,7 @@ class ServersControllerCreateTest(test.TestCase): req.headers["content-type"] = "application/json" res = self.controller.create(req, body) - reservation_id = res.get('reservation_id') + reservation_id = res.obj.get('reservation_id') self.assertNotEqual(reservation_id, "") self.assertNotEqual(reservation_id, None) self.assertTrue(len(reservation_id) > 1) diff --git a/nova/tests/integrated/api_samples/os-multiple-create/multiple-create-post-resp.xml.tpl b/nova/tests/integrated/api_samples/os-multiple-create/multiple-create-post-resp.xml.tpl index a361612b2..e5ba2cc56 100644 --- a/nova/tests/integrated/api_samples/os-multiple-create/multiple-create-post-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-multiple-create/multiple-create-post-resp.xml.tpl @@ -1,4 +1,2 @@ <?xml version='1.0' encoding='UTF-8'?> -<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" reservation_id="%(reservation_id)s"> - <metadata/> -</server> +<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" reservation_id="%(reservation_id)s"/> |