diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-09-18 22:41:18 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-09-18 22:41:18 +0000 |
| commit | ebb2814524dee09cb2f84ceafb2d9888863af8de (patch) | |
| tree | e3fd5e0b9102920dec2103f9a96d56b937b6f032 /nova | |
| parent | 1071af1d8f11e26cd4512f7c2addfdce862c9834 (diff) | |
| parent | 8d43c3fba1a5e07703cae6f7b631d0787c4f41bb (diff) | |
| download | nova-ebb2814524dee09cb2f84ceafb2d9888863af8de.tar.gz nova-ebb2814524dee09cb2f84ceafb2d9888863af8de.tar.xz nova-ebb2814524dee09cb2f84ceafb2d9888863af8de.zip | |
Merge "Makes scheduler hints and disk config xml correct"
Diffstat (limited to 'nova')
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> |
