summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-02-14 09:03:18 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2012-02-15 16:30:39 -0800
commite48c252467b280986660d5ea8ed618f1ccf08d5d (patch)
treee92c9880d2912d2c86d15a9a83d6a148028814bd /nova
parent3e1cff368a6445ea3ae176dcab6fd485c9280ad0 (diff)
downloadnova-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.py4
-rw-r--r--nova/virt/images.py26
-rw-r--r--nova/virt/libvirt/connection.py17
-rw-r--r--nova/virt/libvirt/utils.py4
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)