diff options
| author | Boris Filippov <bfilippov@griddynamics.com> | 2012-09-26 03:11:55 +0400 |
|---|---|---|
| committer | Boris Filippov <bfilippov@griddynamics.com> | 2012-10-10 19:27:07 +0400 |
| commit | 800c08dfe36de52429364f96d708fb3bba0c4e3b (patch) | |
| tree | ebcb1cf35adf9083df9e888f9fd48598f1c22a6d | |
| parent | 76596a79a3d39c9daa2e48a52298b17f06a653fc (diff) | |
| download | nova-800c08dfe36de52429364f96d708fb3bba0c4e3b.tar.gz nova-800c08dfe36de52429364f96d708fb3bba0c4e3b.tar.xz nova-800c08dfe36de52429364f96d708fb3bba0c4e3b.zip | |
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
| -rw-r--r-- | nova/tests/fake_libvirt_utils.py | 5 | ||||
| -rw-r--r-- | nova/tests/test_libvirt.py | 1 | ||||
| -rw-r--r-- | nova/virt/libvirt/driver.py | 16 | ||||
| -rw-r--r-- | 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 |
