summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-09-18 22:41:18 +0000
committerGerrit Code Review <review@openstack.org>2012-09-18 22:41:18 +0000
commitebb2814524dee09cb2f84ceafb2d9888863af8de (patch)
treee3fd5e0b9102920dec2103f9a96d56b937b6f032 /nova
parent1071af1d8f11e26cd4512f7c2addfdce862c9834 (diff)
parent8d43c3fba1a5e07703cae6f7b631d0787c4f41bb (diff)
downloadnova-ebb2814524dee09cb2f84ceafb2d9888863af8de.tar.gz
nova-ebb2814524dee09cb2f84ceafb2d9888863af8de.tar.xz
nova-ebb2814524dee09cb2f84ceafb2d9888863af8de.zip
Merge "Makes scheduler hints and disk config xml correct"
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/compute/contrib/scheduler_hints.py14
-rw-r--r--nova/api/openstack/compute/servers.py25
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py47
-rw-r--r--nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.json.tpl (renamed from nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.json.tpl)0
-rw-r--r--nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.xml.tpl12
-rw-r--r--nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.json.tpl (renamed from nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.json.tpl)0
-rw-r--r--nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.xml.tpl (renamed from nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.xml.tpl)0
-rw-r--r--nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl16
-rw-r--r--nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl6
-rw-r--r--nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.xml.tpl10
10 files changed, 96 insertions, 34 deletions
diff --git a/nova/api/openstack/compute/contrib/scheduler_hints.py b/nova/api/openstack/compute/contrib/scheduler_hints.py
index e8d65a741..f5c10fea1 100644
--- a/nova/api/openstack/compute/contrib/scheduler_hints.py
+++ b/nova/api/openstack/compute/contrib/scheduler_hints.py
@@ -29,13 +29,13 @@ class SchedulerHintsController(wsgi.Controller):
def _extract_scheduler_hints(body):
hints = {}
+ attr = '%s:scheduler_hints' % Scheduler_hints.alias
try:
- hints.update(body['os:scheduler_hints'])
-
- # Ignore if data is not present
- except KeyError:
- pass
-
+ if 'os:scheduler_hints' in body:
+ # NOTE(vish): This is for legacy support
+ hints.update(body['os:scheduler_hints'])
+ elif attr in body:
+ hints.update(body[attr])
# Fail if non-dict provided
except ValueError:
msg = _("Malformed scheduler_hints attribute")
@@ -56,7 +56,7 @@ class Scheduler_hints(extensions.ExtensionDescriptor):
"""Pass arbitrary key/value pairs to the scheduler"""
name = "SchedulerHints"
- alias = "os-scheduler-hints"
+ alias = "OS-SCH-HNT"
namespace = ("http://docs.openstack.org/compute/ext/"
"scheduler-hints/api/v2")
updated = "2011-07-19T00:00:00+00:00"
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 5cb7369c0..c9bc4430e 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -171,7 +171,7 @@ class CommonDeserializer(wsgi.MetadataXMLDeserializer):
scheduler_hints = self._extract_scheduler_hints(server_node)
if scheduler_hints:
- server['os:scheduler_hints'] = scheduler_hints
+ server['OS-SCH-HNT:scheduler_hints'] = scheduler_hints
metadata_node = self.find_first_child_named(server_node, "metadata")
if metadata_node is not None:
@@ -193,19 +193,34 @@ class CommonDeserializer(wsgi.MetadataXMLDeserializer):
if security_groups is not None:
server["security_groups"] = security_groups
+ # NOTE(vish): Support this incorrect version because it was in the code
+ # base for a while and we don't want to accidentally break
+ # anyone that might be using it.
auto_disk_config = server_node.getAttribute('auto_disk_config')
if auto_disk_config:
- server['auto_disk_config'] = utils.bool_from_str(auto_disk_config)
+ server['OS-DCF:diskConfig'] = utils.bool_from_str(auto_disk_config)
+
+ auto_disk_config = server_node.getAttribute('OS-DCF:diskConfig')
+ if auto_disk_config:
+ server['OS-DCF:diskConfig'] = utils.bool_from_str(auto_disk_config)
return server
def _extract_scheduler_hints(self, server_node):
"""Marshal the scheduler hints attribute of a parsed request"""
- node = self.find_first_child_named(server_node, "scheduler_hints")
+ node = self.find_first_child_named(server_node,
+ "OS-SCH-HNT:scheduler_hints")
+ # NOTE(vish): Support the os: prefix because it is what we use
+ # for json, even though OS-SCH-HNT: is more correct
+ if not node:
+ node = self.find_first_child_named(server_node,
+ "os:scheduler_hints")
if node:
scheduler_hints = {}
for child in self.extract_elements(node):
- scheduler_hints[child.nodeName] = self.extract_text(child)
+ scheduler_hints.setdefault(child.nodeName, [])
+ value = self.extract_text(child).strip()
+ scheduler_hints[child.nodeName].append(value)
return scheduler_hints
else:
return None
@@ -774,7 +789,7 @@ class Controller(wsgi.Controller):
auto_disk_config = server_dict.get('auto_disk_config')
scheduler_hints = {}
- if self.ext_mgr.is_loaded('os-scheduler-hints'):
+ if self.ext_mgr.is_loaded('OS-SCH-HNT'):
scheduler_hints = server_dict.get('scheduler_hints', {})
try:
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 0aa628d96..bde59592b 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -1972,7 +1972,7 @@ class ServersControllerCreateTest(test.TestCase):
self._test_create_extra(params)
def test_create_instance_with_scheduler_hints_enabled(self):
- self.ext_mgr.extensions = {'os-scheduler-hints': 'fake'}
+ self.ext_mgr.extensions = {'OS-SCH-HNT': 'fake'}
hints = {'a': 'b'}
params = {'scheduler_hints': hints}
old_create = nova.compute.api.API.create
@@ -3288,6 +3288,51 @@ class TestServerCreateRequestXMLDeserializer(test.TestCase):
}}
self.assertEquals(request['body'], expected)
+ def test_request_with_disk_config(self):
+ serial_request = """
+ <server xmlns="http://docs.openstack.org/compute/api/v2"
+ xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
+ name="new-server-test" imageRef="1" flavorRef="1"
+ OS-DCF:diskConfig="True">
+ </server>"""
+ request = self.deserializer.deserialize(serial_request)
+ expected = {"server": {
+ "name": "new-server-test",
+ "imageRef": "1",
+ "flavorRef": "1",
+ "OS-DCF:diskConfig": True,
+ }}
+ self.assertEquals(request['body'], expected)
+
+ def test_request_with_scheduler_hints(self):
+ serial_request = """
+ <server xmlns="http://docs.openstack.org/compute/api/v2"
+ xmlns:OS-SCH-HNT=
+ "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2"
+ name="new-server-test" imageRef="1" flavorRef="1">
+ <OS-SCH-HNT:scheduler_hints>
+ <different_host>
+ 7329b667-50c7-46a6-b913-cb2a09dfeee0
+ </different_host>
+ <different_host>
+ f31efb24-34d2-43e1-8b44-316052956a39
+ </different_host>
+ </OS-SCH-HNT:scheduler_hints>
+ </server>"""
+ request = self.deserializer.deserialize(serial_request)
+ expected = {"server": {
+ "name": "new-server-test",
+ "imageRef": "1",
+ "flavorRef": "1",
+ "OS-SCH-HNT:scheduler_hints": {
+ "different_host": [
+ "7329b667-50c7-46a6-b913-cb2a09dfeee0",
+ "f31efb24-34d2-43e1-8b44-316052956a39",
+ ]
+ }
+ }}
+ self.assertEquals(request['body'], expected)
+
class TestAddressesXMLSerialization(test.TestCase):
diff --git a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.json.tpl b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.json.tpl
index 1a19960c2..1a19960c2 100644
--- a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.json.tpl
+++ b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.json.tpl
diff --git a/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.xml.tpl b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.xml.tpl
new file mode 100644
index 000000000..a680e3476
--- /dev/null
+++ b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-req.xml.tpl
@@ -0,0 +1,12 @@
+<server
+ xmlns="http://docs.openstack.org/compute/api/v1.1"
+ xmlns:OS-SCH-HNT="http://docs.openstack.org/compute/ext/scheduler-hints/api/v2"
+ name='new-server-test'
+ imageRef='%(image_id)s'
+ flavorRef='1'
+>
+ <OS-SCH-HNT:scheduler_hints>
+ <hypervisor>xen</hypervisor>
+ <near>%(image_near)s</near>
+ </OS-SCH-HNT:scheduler_hints>
+</server>
diff --git a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.json.tpl b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.json.tpl
index d5f030c87..d5f030c87 100644
--- a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.json.tpl
+++ b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.json.tpl
diff --git a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.xml.tpl b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.xml.tpl
index 5a11c73c3..5a11c73c3 100644
--- a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-resp.xml.tpl
+++ b/nova/tests/integrated/api_samples/OS-SCH-HNT/scheduler-hints-post-resp.xml.tpl
diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl
index 62f6a8ece..f566a5020 100644
--- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl
+++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl
@@ -49,6 +49,14 @@
"updated": "%(timestamp)s"
},
{
+ "alias": "OS-SCH-HNT",
+ "description": "%(text)s",
+ "links": [],
+ "name": "SchedulerHints",
+ "namespace": "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2",
+ "updated": "%(timestamp)s"
+ },
+ {
"alias": "os-admin-actions",
"description": "%(text)s",
"links": [],
@@ -265,14 +273,6 @@
"updated": "%(timestamp)s"
},
{
- "alias": "os-scheduler-hints",
- "description": "%(text)s",
- "links": [],
- "name": "SchedulerHints",
- "namespace": "http://docs.openstack.org/compute/ext/scheduler-hints/api/v2",
- "updated": "%(timestamp)s"
- },
- {
"alias": "os-security-groups",
"description": "%(text)s",
"links": [],
diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl
index cc79f8e84..20e650d7c 100644
--- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl
+++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl
@@ -18,6 +18,9 @@
<extension alias="OS-FLV-EXT-DATA" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/flavor_extra_data/api/v1.1" name="FlavorExtraData">
<description>%(text)s</description>
</extension>
+ <extension alias="OS-SCH-HNT" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/scheduler-hints/api/v2" name="SchedulerHints">
+ <description>%(text)s</description>
+ </extension>
<extension alias="os-admin-actions" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/admin-actions/api/v1.1" name="AdminActions">
<description>%(text)s</description>
</extension>
@@ -99,9 +102,6 @@
<extension alias="os-rescue" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/rescue/api/v1.1" name="Rescue">
<description>%(text)s</description>
</extension>
- <extension alias="os-scheduler-hints" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/scheduler-hints/api/v2" name="SchedulerHints">
- <description>%(text)s</description>
- </extension>
<extension alias="os-security-groups" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/securitygroups/api/v1.1" name="SecurityGroups">
<description>%(text)s</description>
</extension>
diff --git a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.xml.tpl b/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.xml.tpl
deleted file mode 100644
index 66327c534..000000000
--- a/nova/tests/integrated/api_samples/os-scheduler-hints/scheduler-hints-post-req.xml.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-<server
- name='new-server-test'
- imageRef='%(image_id)s'
- flavorRef='1'
->
- <scheduler_hints>
- <hypervisor>xen</hypervisor>
- <near>%(image_near)s</near>
- </scheduler_hints>
-</server>