Merge "API test for 'create server with scheduler hints'"
diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py
index 77431bb..1f2ddf4 100644
--- a/tempest/api/compute/admin/test_servers.py
+++ b/tempest/api/compute/admin/test_servers.py
@@ -185,6 +185,16 @@
resp, server_body = self.client.inject_network_info(server['id'])
self.assertEqual(202, resp.status)
+ @test.attr(type='gate')
+ def test_create_server_with_scheduling_hint(self):
+ # Create a server with scheduler hints.
+ hints = {
+ 'same_host': self.s1_id
+ }
+ resp, server = self.create_test_server(sched_hints=hints,
+ wait_until='ACTIVE')
+ self.assertEqual('202', resp['status'])
+
class ServersAdminTestXML(ServersAdminTestJSON):
_host_key = (
diff --git a/tempest/services/compute/json/servers_client.py b/tempest/services/compute/json/servers_client.py
index 4eba2b4..d6705db 100644
--- a/tempest/services/compute/json/servers_client.py
+++ b/tempest/services/compute/json/servers_client.py
@@ -78,7 +78,12 @@
value = kwargs.get(key)
if value is not None:
post_body[post_param] = value
- post_body = json.dumps({'server': post_body})
+ post_body = {'server': post_body}
+
+ if 'sched_hints' in kwargs:
+ hints = {'os:scheduler_hints': kwargs.get('sched_hints')}
+ post_body = dict(post_body.items() + hints.items())
+ post_body = json.dumps(post_body)
resp, body = self.post('servers', post_body)
body = json.loads(body)
diff --git a/tempest/services/compute/xml/servers_client.py b/tempest/services/compute/xml/servers_client.py
index 1215b80..7a2a071 100644
--- a/tempest/services/compute/xml/servers_client.py
+++ b/tempest/services/compute/xml/servers_client.py
@@ -360,6 +360,15 @@
temp.append(Text(k['contents']))
personality.append(temp)
+ if 'sched_hints' in kwargs:
+ sched_hints = kwargs.get('sched_hints')
+ hints = Element("os:scheduler_hints")
+ hints.add_attr('xmlns:os', XMLNS_11)
+ for attr in sched_hints:
+ p1 = Element(attr)
+ p1.append(sched_hints[attr])
+ hints.append(p1)
+ server.append(hints)
resp, body = self.post('servers', str(Document(server)))
server = self._parse_server(etree.fromstring(body))
return resp, server