diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-17 17:10:58 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-17 17:10:58 +0000 |
| commit | 676965280136407c9f69072e6fa468e9e2ea14eb (patch) | |
| tree | 9e5a3fb78fb8ea53364a061fe21163d056f51850 | |
| parent | 8456f265b273b38e5ff28940ebfde6ecddae76b0 (diff) | |
| parent | e48c252467b280986660d5ea8ed618f1ccf08d5d (diff) | |
Merge "Create a flag for force_to_raw for images"
| -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 ce86c2da6..88343b7ce 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -941,21 +941,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""" @@ -1919,7 +1904,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) |
