From 800c08dfe36de52429364f96d708fb3bba0c4e3b Mon Sep 17 00:00:00 2001 From: Boris Filippov Date: Wed, 26 Sep 2012 03:11:55 +0400 Subject: Add util for disk type retrieval blueprint snapshots-for-everyone Add libvirt.utils.get_disk_type that retrieves format for given file. Format can be raw, qcow2, or lvm. Change-Id: I33898983cfa15db6b2654648ce32f72b6dd920cb --- nova/tests/fake_libvirt_utils.py | 5 +++++ nova/tests/test_libvirt.py | 1 + nova/virt/libvirt/driver.py | 16 ++++------------ nova/virt/libvirt/utils.py | 8 ++++++++ 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/nova/tests/fake_libvirt_utils.py b/nova/tests/fake_libvirt_utils.py index 378515ac0..1862521c1 100644 --- a/nova/tests/fake_libvirt_utils.py +++ b/nova/tests/fake_libvirt_utils.py @@ -21,6 +21,7 @@ import StringIO files = {} disk_sizes = {} disk_backing_files = {} +disk_type = "qcow2" def get_iscsi_initiator(): @@ -39,6 +40,10 @@ def get_disk_backing_file(path): return disk_backing_files.get(path, None) +def get_disk_type(path): + return disk_type + + def copy_image(src, dest): pass diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 91cf8df7c..523761454 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1162,6 +1162,7 @@ class LibvirtConnTestCase(test.TestCase): libvirt_driver.LibvirtDriver._conn.lookupByName = self.fake_lookup self.mox.StubOutWithMock(libvirt_driver.utils, 'execute') libvirt_driver.utils.execute = self.fake_execute + self.stubs.Set(libvirt_driver.libvirt_utils, 'disk_type', 'raw') self.mox.ReplayAll() diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 78b02633f..50227ae6d 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -808,16 +808,11 @@ class LibvirtDriver(driver.ComputeDriver): arch = base['properties']['architecture'] metadata['properties']['architecture'] = arch - source_format = base.get('disk_format') or 'raw' - if source_format == 'ami': - # NOTE(vish): assume amis are raw - source_format = 'raw' + disk_path = libvirt_utils.find_disk(virt_dom) + source_format = libvirt_utils.get_disk_type(disk_path) + image_format = FLAGS.snapshot_image_format or source_format - use_qcow2 = ((FLAGS.libvirt_images_type == 'default' and - FLAGS.use_cow_images) or - FLAGS.libvirt_images_type == 'qcow2') - if use_qcow2: - source_format = 'qcow2' + # NOTE(vish): glance forces ami disk format to be ami if base.get('disk_format') == 'ami': metadata['disk_format'] = 'ami' @@ -826,9 +821,6 @@ class LibvirtDriver(driver.ComputeDriver): metadata['container_format'] = base.get('container_format', 'bare') - # Find the disk - disk_path = libvirt_utils.find_disk(virt_dom) - snapshot_name = uuid.uuid4().hex (state, _max_mem, _mem, _cpus, _t) = virt_dom.info() diff --git a/nova/virt/libvirt/utils.py b/nova/virt/libvirt/utils.py index 73e0201df..2d1b5558c 100644 --- a/nova/virt/libvirt/utils.py +++ b/nova/virt/libvirt/utils.py @@ -411,6 +411,14 @@ def find_disk(virt_dom): return disk_path +def get_disk_type(path): + """Retrieve disk type (raw, qcow2, lvm) for given file""" + if path.startswith('/dev'): + return 'lvm' + + return images.qemu_img_info(path)['file format'] + + def get_fs_info(path): """Get free/used/total space info for a filesystem -- cgit