From 79a2ea2f5f83dc401d089e357bf35dbdfb8be959 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Tue, 7 Aug 2012 08:48:31 -0400 Subject: 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 --- nova/tests/test_xenapi.py | 21 +++++++++------------ nova/virt/xenapi/vmops.py | 4 ++-- 2 files changed, 11 insertions(+), 14 deletions(-) (limited to 'nova') 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)) -- cgit