Skip to content

Commit

Permalink
Update vmops to access metadata as dict.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
dprince committed Aug 7, 2012
1 parent 5f98329 commit 79a2ea2
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 14 deletions.
21 changes: 9 additions & 12 deletions nova/tests/test_xenapi.py
Expand Up @@ -2261,22 +2261,19 @@ def fake_delete_from_xenstore(inst, instance, path, vm_ref=None):
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, {
Expand Down
4 changes: 2 additions & 2 deletions nova/virt/xenapi/vmops.py
Expand Up @@ -852,8 +852,8 @@ def inject_instance_metadata(self, instance, vm_ref):
"""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))

Expand Down

0 comments on commit 79a2ea2

Please sign in to comment.