summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/api_samples/os-multiple-create/multiple-create-post-resp.xml4
-rw-r--r--nova/api/openstack/compute/servers.py18
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py2
-rw-r--r--nova/tests/integrated/api_samples/os-multiple-create/multiple-create-post-resp.xml.tpl4
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"/>