diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-02-14 09:03:18 -0800 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-02-15 16:30:39 -0800 |
| commit | e48c252467b280986660d5ea8ed618f1ccf08d5d (patch) | |
| tree | e92c9880d2912d2c86d15a9a83d6a148028814bd /nova | |
| parent | 3e1cff368a6445ea3ae176dcab6fd485c9280ad0 (diff) | |
| download | nova-e48c252467b280986660d5ea8ed618f1ccf08d5d.tar.gz nova-e48c252467b280986660d5ea8ed618f1ccf08d5d.tar.xz nova-e48c252467b280986660d5ea8ed618f1ccf08d5d.zip | |
Create a flag for force_to_raw for images
* Allows for deployers to use compressed images if they prefer
* Flag defaults to current behavior
* Fixes bug 932180
* Re-enables fetch_to_raw which was being skipped
* Removes obsolete and broken method from libvirt
* Checksumming will be re-enabled in a later patch
Change-Id: I40c33cfd3997cae8d127fa45f8cf0aa071418170
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/tests/test_libvirt.py | 4 | ||||
| -rw-r--r-- | nova/virt/images.py | 26 | ||||
| -rw-r--r-- | nova/virt/libvirt/connection.py | 17 | ||||
| -rw-r--r-- | nova/virt/libvirt/utils.py | 4 |
4 files changed, 22 insertions, 29 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 2eede7ed5..8a54c3e3b 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1975,14 +1975,14 @@ disk size: 4.4M''', '')) self.assertEquals(4096000, fs_info['used']) def test_fetch_image(self): - self.mox.StubOutWithMock(images, 'fetch') + self.mox.StubOutWithMock(images, 'fetch_to_raw') context = 'opaque context' target = '/tmp/targetfile' image_id = '4' user_id = 'fake' project_id = 'fake' - images.fetch(context, image_id, target, user_id, project_id) + images.fetch_to_raw(context, image_id, target, user_id, project_id) self.mox.ReplayAll() libvirt_utils.fetch_image(context, target, image_id, diff --git a/nova/virt/images.py b/nova/virt/images.py index 9a5a9e1b2..1f3228b5e 100644 --- a/nova/virt/images.py +++ b/nova/virt/images.py @@ -27,12 +27,22 @@ from nova import exception from nova import flags import nova.image from nova import log as logging +from nova.openstack.common import cfg from nova import utils FLAGS = flags.FLAGS LOG = logging.getLogger(__name__) +image_opts = [ + cfg.BoolOpt('force_raw_images', + default=True, + help='Force backing images to raw format'), +] + +FLAGS = flags.FLAGS +FLAGS.register_opts(image_opts) + def fetch(context, image_href, path, _user_id, _project_id): # TODO(vish): Improve context handling and add owner and auth data @@ -72,20 +82,20 @@ def fetch_to_raw(context, image_href, path, user_id, project_id): data = _qemu_img_info(path_tmp) - fmt = data.get("file format", None) + fmt = data.get("file format") if fmt is None: os.unlink(path_tmp) raise exception.ImageUnacceptable( reason=_("'qemu-img info' parsing failed."), image_id=image_href) - if fmt != "raw": - staged = "%s.converted" % path - if "backing file" in data: - backing_file = data['backing file'] - os.unlink(path_tmp) - raise exception.ImageUnacceptable(image_id=image_href, - reason=_("fmt=%(fmt)s backed by: %(backing_file)s") % locals()) + if "backing file" in data: + backing_file = data['backing file'] + os.unlink(path_tmp) + raise exception.ImageUnacceptable(image_id=image_href, + reason=_("fmt=%(fmt)s backed by: %(backing_file)s") % locals()) + if fmt != "raw" and FLAGS.force_raw_images: + staged = "%s.converted" % path LOG.debug("%s was %s, converting to raw" % (image_href, fmt)) out, err = utils.execute('qemu-img', 'convert', '-O', 'raw', path_tmp, staged) diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index 77b53e9fb..a503bdf48 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -934,21 +934,6 @@ class LibvirtConnection(driver.ComputeDriver): disk.extend(target, size) @staticmethod - def _fetch_image(context, target, image_id, user_id, project_id): - """Grab image to raw format""" - images.fetch_to_raw(context, image_id, target, user_id, project_id) - - if FLAGS.checksum_base_images: - f = open(target, 'r') - checksum = utils.hash_file(f) - f.close() - - checksum_fname = '%s.sha1' % target - fd = os.open(checksum_filename, os.O_WRONLY, mode=0444) - os.write(fd, checksum) - os.close(fd) - - @staticmethod def _create_local(target, local_size, unit='G', fs_format=None): """Create a blank image of specified size""" @@ -1912,7 +1897,7 @@ class LibvirtConnection(driver.ComputeDriver): cached_file = info['backing_file'].split('_')[0] if not os.path.exists(backing_file): - self._cache_image(fn=self._fetch_image, + self._cache_image(fn=libvirt_utils.fetch_image, context=ctxt, target=info['path'], fname=cached_file, diff --git a/nova/virt/libvirt/utils.py b/nova/virt/libvirt/utils.py index 080b58736..da3f95d4f 100644 --- a/nova/virt/libvirt/utils.py +++ b/nova/virt/libvirt/utils.py @@ -21,13 +21,11 @@ import os import random -import shutil from nova import exception from nova import flags from nova.openstack.common import cfg from nova import utils -from nova.virt.disk import api as disk from nova.virt import images @@ -258,4 +256,4 @@ def get_fs_info(path): def fetch_image(context, target, image_id, user_id, project_id): """Grab image""" - images.fetch(context, image_id, target, user_id, project_id) + images.fetch_to_raw(context, image_id, target, user_id, project_id) |
