diff options
| author | Dan Prince <dprince@redhat.com> | 2012-08-07 08:48:31 -0400 |
|---|---|---|
| committer | Dan Prince <dprince@redhat.com> | 2012-08-07 09:14:44 -0400 |
| commit | 79a2ea2f5f83dc401d089e357bf35dbdfb8be959 (patch) | |
| tree | 993dabcca7860adbc2fb1c7d9a517c8151899afd | |
| parent | 5f983299a31056f20a03e8acf5418360977a2111 (diff) | |
| download | nova-79a2ea2f5f83dc401d089e357bf35dbdfb8be959.tar.gz nova-79a2ea2f5f83dc401d089e357bf35dbdfb8be959.tar.xz nova-79a2ea2f5f83dc401d089e357bf35dbdfb8be959.zip | |
Update vmops to access metadata as dict.
Updates the inject_instance_metadata in xenapi/vmops.py so
that it accesses metadata as a dict instead of an object.
This resolves issues causing exceptions when booting instances
on XenServer.
Fixes LP Bug #1033963
Change-Id: I58810764abd32d9d292f8282b54c126bf1f4de18
| -rw-r--r-- | nova/tests/test_xenapi.py | 21 | ||||
| -rw-r--r-- | nova/virt/xenapi/vmops.py | 4 |
2 files changed, 11 insertions, 14 deletions
diff --git a/nova/tests/test_xenapi.py b/nova/tests/test_xenapi.py index cfabe85c9..5bf4468c1 100644 --- a/nova/tests/test_xenapi.py +++ b/nova/tests/test_xenapi.py @@ -2261,22 +2261,19 @@ class XenAPIInjectMetadataTestCase(stubs.XenAPITestBase): fake_delete_from_xenstore) def test_inject_instance_metadata(self): - class FakeMetaItem(object): - def __init__(self, key, value): - self.key = key - self.value = value # Add some system_metadata to ensure it doesn't get added # to xenstore - instance = dict(metadata=[FakeMetaItem("a", 1), - FakeMetaItem("b", 2), - FakeMetaItem("c", 3), + instance = dict(metadata=[{'key': 'a', 'value': 1}, + {'key': 'b', 'value': 2}, + {'key': 'c', 'value': 3}, # Check xenstore key sanitizing - FakeMetaItem("hi.there", 4), - FakeMetaItem("hi!t.e/e", 5)], - system_metadata=[FakeMetaItem("sys_a", 1), - FakeMetaItem("sys_b", 2), - FakeMetaItem("sys_c", 3)]) + {'key': 'hi.there', 'value': 4}, + {'key': 'hi!t.e/e', 'value': 5}], + # Check xenstore key sanitizing + system_metadata=[{'key': 'sys_a', 'value': 1}, + {'key': 'sys_b', 'value': 2}, + {'key': 'sys_c', 'value': 3}]) self.conn._vmops.inject_instance_metadata(instance, 'vm_ref') self.assertEqual(self.xenstore, { diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index a61659eab..8d443f498 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -852,8 +852,8 @@ class VMOps(object): """Inject instance metadata into xenstore.""" def store_meta(topdir, data_list): for item in data_list: - key = self._sanitize_xenstore_key(item.key) - value = item.value or '' + key = self._sanitize_xenstore_key(item['key']) + value = item['value'] or '' self._add_to_param_xenstore(vm_ref, '%s/%s' % (topdir, key), jsonutils.dumps(value)) |
