summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Behrens <cbehrens@codestud.com>2011-05-23 16:51:28 -0500
committerChris Behrens <cbehrens@codestud.com>2011-05-23 16:51:28 -0500
commit42c209d90f491d19b3aabc70f8dafc33b76cf20d (patch)
treea521166ff42a92e331923a0cf20c12597c9d7218
parent94766fac0f5fdb3c7847b1129a8f05948a97f887 (diff)
fix tests, have glance plugin return json encoded string of vdi uuids
-rw-r--r--nova/tests/xenapi/stubs.py11
-rw-r--r--nova/virt/xenapi/vm_utils.py6
-rw-r--r--nova/virt/xenapi/vmops.py4
-rw-r--r--plugins/xenserver/xenapi/etc/xapi.d/plugins/glance6
4 files changed, 21 insertions, 6 deletions
diff --git a/nova/tests/xenapi/stubs.py b/nova/tests/xenapi/stubs.py
index d9306900d..9f6f64318 100644
--- a/nova/tests/xenapi/stubs.py
+++ b/nova/tests/xenapi/stubs.py
@@ -17,6 +17,7 @@
"""Stubouts, mocks and fixtures for the test suite"""
import eventlet
+import json
from nova.virt import xenapi_conn
from nova.virt.xenapi import fake
from nova.virt.xenapi import volume_utils
@@ -37,7 +38,7 @@ def stubout_instance_snapshot(stubs):
sr_ref=sr_ref, sharable=False)
vdi_rec = session.get_xenapi().VDI.get_record(vdi_ref)
vdi_uuid = vdi_rec['uuid']
- return dict(primary_vdi_uuid=vdi_uuid, swap_vdi_uuid=None)
+ return {'primary_vdi_uuid': vdi_uuid}
stubs.Set(vm_utils.VMHelper, 'fetch_image', fake_fetch_image)
@@ -132,10 +133,16 @@ class FakeSessionForVMTests(fake.SessionBase):
def __init__(self, uri):
super(FakeSessionForVMTests, self).__init__(uri)
- def host_call_plugin(self, _1, _2, _3, _4, _5):
+ def host_call_plugin(self, _1, _2, plugin, method, _5):
sr_ref = fake.get_all('SR')[0]
vdi_ref = fake.create_vdi('', False, sr_ref, False)
vdi_rec = fake.get_record('VDI', vdi_ref)
+ if plugin == "glance" and method == "download_vhd":
+ swap_vdi_ref = fake.create_vdi('', False, sr_ref, False)
+ swap_vdi_rec = fake.get_record('VDI', swap_vdi_ref)
+ return '<string>%s</string>' % json.dumps(
+ {'primary_vdi_uuid': vdi_rec['uuid'],
+ 'swap_vdi_uuid': swap_vdi_rec['uuid']})
return '<string>%s</string>' % vdi_rec['uuid']
def VM_start(self, _1, ref, _2, _3):
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index f1f7b8249..3d980013a 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -19,6 +19,7 @@ Helper methods for operations related to the management of VM records and
their attributes like VDIs, VIFs, as well as their lookup functions.
"""
+import json
import os
import pickle
import re
@@ -408,7 +409,8 @@ class VMHelper(HelperBase):
kwargs = {'params': pickle.dumps(params)}
task = session.async_call_plugin('glance', 'download_vhd', kwargs)
- vdi_uuids = session.wait_for_task(task, instance_id)
+ result = session.wait_for_task(task, instance_id)
+ vdi_uuids = json.loads(result)
primary_vdi_uuid = vdi_uuids.get('primary_vdi_uuid')
swap_vdi_uuid = vdi_uuids.get('swap_vdi_uuid', None)
@@ -571,6 +573,8 @@ class VMHelper(HelperBase):
args['raw'] = 'true'
task = session.async_call_plugin('objectstore', fn, args)
uuid = session.wait_for_task(task, instance_id)
+ if image_type != ImageType.KERNEL_RAMDISK:
+ return {'primary_vdi_uuid': uuid}
return uuid
@classmethod
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index 0c30ad4cb..0d7ef5fac 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -91,7 +91,7 @@ class VMOps(object):
def finish_resize(self, instance, disk_info):
vdi_uuid = self.link_disks(instance, disk_info['base_copy'],
disk_info['cow'])
- vm_ref = self._create_vm(instance, vdi_uuid)
+ vm_ref = self._create_vm(instance, {'primary_vdi_uuid': vdi_uuid})
self.resize_instance(instance, vdi_uuid)
self._spawn(instance, vm_ref)
@@ -144,7 +144,7 @@ class VMOps(object):
# Are we building from a pre-existing disk?
primary_vdi_ref = self._session.call_xenapi('VDI.get_by_uuid',
- vdi_uuids['primary_vdi_uuid'])
+ vdi_uuids.get('primary_vdi_uuid'))
swap_vdi_uuid = vdi_uuids.get('swap_vdi_uuid', None)
if swap_vdi_uuid:
swap_vdi_ref = self._session.call_xenapi('VDI.get_by_uuid', swap_vdi_uuid)
diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
index 6cc7617e0..0d02adfe9 100644
--- a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
+++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
@@ -22,6 +22,10 @@
#
import httplib
+try:
+ import json
+except ImportError:
+ import simplejson as json
import os
import os.path
import pickle
@@ -335,7 +339,7 @@ def download_vhd(session, args):
try:
_download_tarball(sr_path, staging_path, image_id, glance_host,
glance_port)
- return _fixup_vhds(sr_path, staging_path, uuid_stack)
+ return json.dumps(_fixup_vhds(sr_path, staging_path, uuid_stack))
finally:
_cleanup_staging_area(staging_path)