summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/tests/test_libvirt.py23
-rw-r--r--nova/virt/libvirt/driver.py45
2 files changed, 42 insertions, 26 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 52cec9ebc..b45780912 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -18,6 +18,7 @@
import copy
import errno
import eventlet
+import json
import mox
import os
import re
@@ -1850,16 +1851,30 @@ class LibvirtConnTestCase(test.TestCase):
# Test data
instance_ref = db.instance_create(self.context, self.test_instance)
- dummyjson = ('[{"path": "%s/disk", "disk_size": "10737418240",'
- ' "type": "raw", "backing_file": ""}]')
+ dummy_info = [{'path': '%s/disk' % tmpdir,
+ 'disk_size': 10737418240,
+ 'type': 'raw',
+ 'backing_file': ''},
+ {'backing_file': 'otherdisk_1234567',
+ 'path': '%s/otherdisk' % tmpdir,
+ 'virt_disk_size': 10737418240}]
+ dummyjson = json.dumps(dummy_info)
- # Preparing mocks
# qemu-img should be mockd since test environment might not have
# large disk space.
+ self.mox.StubOutWithMock(imagebackend.Image, 'cache')
+ imagebackend.Image.cache(context=mox.IgnoreArg(),
+ fn=mox.IgnoreArg(),
+ fname='otherdisk',
+ image_id=123456,
+ project_id='fake',
+ size=10737418240L,
+ user_id=None).AndReturn(None)
self.mox.ReplayAll()
+
conn = libvirt_driver.LibvirtDriver(False)
conn.pre_block_migration(self.context, instance_ref,
- dummyjson % tmpdir)
+ dummyjson)
self.assertTrue(os.path.exists('%s/%s/' %
(tmpdir, instance_ref.name)))
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 75f157b9c..bf3cec403 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -2507,11 +2507,11 @@ class LibvirtDriver(driver.ComputeDriver):
% locals())
greenthread.sleep(1)
- def pre_block_migration(self, ctxt, instance_ref, disk_info_json):
+ def pre_block_migration(self, ctxt, instance, disk_info_json):
"""Preparation block migration.
:params ctxt: security context
- :params instance_ref:
+ :params instance:
nova.db.sqlalchemy.models.Instance object
instance object that is migrated.
:params disk_info_json:
@@ -2521,7 +2521,7 @@ class LibvirtDriver(driver.ComputeDriver):
disk_info = jsonutils.loads(disk_info_json)
# make instance directory
- instance_dir = os.path.join(FLAGS.instances_path, instance_ref['name'])
+ instance_dir = os.path.join(FLAGS.instances_path, instance['name'])
if os.path.exists(instance_dir):
raise exception.DestinationDiskExists(path=instance_dir)
os.mkdir(instance_dir)
@@ -2540,30 +2540,31 @@ class LibvirtDriver(driver.ComputeDriver):
# Remove any size tags which the cache manages
cache_name = cache_name.split('_')[0]
- self._cache_image(fn=libvirt_utils.fetch_image,
- context=ctxt,
- target=instance_disk,
- fname=cache_name,
- cow=FLAGS.use_cow_images,
- image_id=instance_ref['image_ref'],
- user_id=instance_ref['user_id'],
- project_id=instance_ref['project_id'],
- size=info['virt_disk_size'])
+ image = self.image_backend.image(instance['name'], cache_name,
+ FLAGS.libvirt_images_type)
+ image.cache(fn=libvirt_utils.fetch_image,
+ context=ctxt,
+ fname=cache_name,
+ image_id=instance['image_ref'],
+ user_id=instance['user_id'],
+ project_id=instance['project_id'],
+ size=info['virt_disk_size'])
# if image has kernel and ramdisk, just download
# following normal way.
- if instance_ref['kernel_id']:
+ if instance['kernel_id']:
libvirt_utils.fetch_image(ctxt,
- os.path.join(instance_dir, 'kernel'),
- instance_ref['kernel_id'],
- instance_ref['user_id'],
- instance_ref['project_id'])
- if instance_ref['ramdisk_id']:
+ os.path.join(instance_dir, 'kernel'),
+ instance['kernel_id'],
+ instance['user_id'],
+ instance['project_id'])
+ if instance['ramdisk_id']:
libvirt_utils.fetch_image(ctxt,
- os.path.join(instance_dir, 'ramdisk'),
- instance_ref['ramdisk_id'],
- instance_ref['user_id'],
- instance_ref['project_id'])
+ os.path.join(instance_dir,
+ 'ramdisk'),
+ instance['ramdisk_id'],
+ instance['user_id'],
+ instance['project_id'])
def post_live_migration_at_destination(self, ctxt,
instance_ref,