summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2012-08-07 08:48:31 -0400
committerDan Prince <dprince@redhat.com>2012-08-07 09:14:44 -0400
commit79a2ea2f5f83dc401d089e357bf35dbdfb8be959 (patch)
tree993dabcca7860adbc2fb1c7d9a517c8151899afd
parent5f983299a31056f20a03e8acf5418360977a2111 (diff)
downloadnova-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.py21
-rw-r--r--nova/virt/xenapi/vmops.py4
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))