Change in vdsm[master]: qemuimg: add backing file to convert
Federico Simoncelli
fsimonce at redhat.com
Wed Sep 24 22:02:11 UTC 2014
Federico Simoncelli has uploaded a new change for review.
Change subject: qemuimg: add backing file to convert
......................................................................
qemuimg: add backing file to convert
This patch adds the support for the backing file in the convert qemu-img
command.
Change-Id: I2d6f254f5750fa249809469ecc764a73c91914d4
Signed-off-by: Federico Simoncelli <fsimonce at redhat.com>
---
M lib/vdsm/qemuimg.py
M tests/qemuimgTests.py
2 files changed, 83 insertions(+), 9 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/33354/1
diff --git a/lib/vdsm/qemuimg.py b/lib/vdsm/qemuimg.py
index e845ba3..7b0d5a3 100644
--- a/lib/vdsm/qemuimg.py
+++ b/lib/vdsm/qemuimg.py
@@ -183,8 +183,21 @@
return check
-def convert(srcImage, dstImage, stop, srcFormat=None, dstFormat=None):
+def _qcow2_backing_opts(backing, backingFormat):
+ options = []
+
+ options.append('backing_file=' + str(backing))
+ if backingFormat:
+ options.append('backing_fmt=' + str(backingFormat))
+
+ return options
+
+
+def convert(srcImage, dstImage, stop, srcFormat=None, dstFormat=None,
+ backing=None, backingFormat=None):
cmd = [_qemuimg.cmd, "convert", "-t", "none"]
+ options = []
+ cwdPath = None
if srcFormat:
cmd.extend(("-f", srcFormat))
@@ -193,13 +206,26 @@
if dstFormat:
cmd.extend(("-O", dstFormat))
- if dstFormat == FORMAT.QCOW2 and _supports_qcow2_compat('convert'):
- cmd.extend(('-o', 'compat=' + QCOW2_COMPAT))
+
+ if dstFormat == FORMAT.QCOW2:
+ if _supports_qcow2_compat('convert'):
+ options.append('compat=' + QCOW2_COMPAT)
+
+ if backing:
+ if not os.path.isabs(backing):
+ cwdPath = os.path.dirname(srcImage)
+
+ options.extend(
+ _qcow2_backing_opts(backing, backingFormat))
+
+ if options:
+ cmd.extend(('-o', ','.join(options)))
cmd.append(dstImage)
(rc, out, err) = utils.watchCmd(
- cmd, stop=stop, nice=utils.NICENESS.HIGH, ioclass=utils.IOCLASS.IDLE)
+ cmd, cwd=cwdPath, stop=stop, nice=utils.NICENESS.HIGH,
+ ioclass=utils.IOCLASS.IDLE)
if rc != 0:
raise QImgError(rc, out, err)
diff --git a/tests/qemuimgTests.py b/tests/qemuimgTests.py
index 73d897b..6e2adc9 100644
--- a/tests/qemuimgTests.py
+++ b/tests/qemuimgTests.py
@@ -185,21 +185,69 @@
with FakeCmd(utils, 'watchCmd', convert):
qemuimg.convert('src', 'dst', True, dstFormat='qcow2')
- def test_qcow2_compat_supported(self):
- def qcow2_compat_supported(cmd, **kw):
- self.check_supports_qcow2_compat(cmd, **kw)
- return 0, 'Supported options:\ncompat ...\n', ''
+ def qcow2_compat_supported(self, cmd, **kw):
+ self.check_supports_qcow2_compat(cmd, **kw)
+ return 0, 'Supported options:\ncompat ...\n', ''
+ def test_qcow2_compat_supported(self):
def convert(cmd, **kw):
expected = [QEMU_IMG, 'convert', '-t', 'none', 'src', '-O',
'qcow2', '-o', 'compat=0.10', 'dst']
self.assertEqual(cmd, expected)
return 0, '', ''
- with FakeCmd(utils, 'execCmd', qcow2_compat_supported):
+ with FakeCmd(utils, 'execCmd', self.qcow2_compat_supported):
with FakeCmd(utils, 'watchCmd', convert):
qemuimg.convert('src', 'dst', True, dstFormat='qcow2')
def check_supports_qcow2_compat(self, cmd, **kw):
expected = [QEMU_IMG, 'convert', '-O', 'qcow2', '-o', '?', '/dev/null']
self.assertEqual(cmd, expected)
+
+ def test_qcow2_no_backing_file(self):
+ def qcow2_no_backing_file(cmd, **kw):
+ assert cmd == [qemuimg._qemuimg.cmd, 'convert', '-t', 'none',
+ 'source', '-O', 'qcow2', '-o', 'compat=0.10',
+ 'target']
+ return 0, '', ''
+
+ with FakeCmd(utils, 'execCmd', self.qcow2_compat_supported):
+ with FakeCmd(utils, 'watchCmd', qcow2_no_backing_file):
+ qemuimg.convert('source', 'target', None, dstFormat='qcow2')
+
+ def test_qcow2_backing_file(self):
+ def qcow2_backing_file(cmd, **kw):
+ assert cmd == [qemuimg._qemuimg.cmd, 'convert', '-t', 'none',
+ 'source', '-O', 'qcow2', '-o',
+ 'compat=0.10,backing_file=backing', 'target']
+ return 0, '', ''
+
+ with FakeCmd(utils, 'execCmd', self.qcow2_compat_supported):
+ with FakeCmd(utils, 'watchCmd', qcow2_backing_file):
+ qemuimg.convert('source', 'target', None, dstFormat='qcow2',
+ backing='backing')
+
+ def test_qcow2_backing_format(self):
+ def qcow2_backing_format(cmd, **kw):
+ assert cmd == [qemuimg._qemuimg.cmd, 'convert', '-t', 'none',
+ 'source', '-O', 'qcow2', '-o', 'compat=0.10',
+ 'target']
+ return 0, '', ''
+
+ with FakeCmd(utils, 'execCmd', self.qcow2_compat_supported):
+ with FakeCmd(utils, 'watchCmd', qcow2_backing_format):
+ qemuimg.convert('source', 'target', None, dstFormat='qcow2',
+ backingFormat='qcow2')
+
+ def test_qcow2_backing_file_and_format(self):
+ def qcow2_backing_format(cmd, **kw):
+ assert cmd == [qemuimg._qemuimg.cmd, 'convert', '-t', 'none',
+ 'source', '-O', 'qcow2', '-o',
+ 'compat=0.10,backing_file=backing,'
+ 'backing_fmt=qcow2', 'target']
+ return 0, '', ''
+
+ with FakeCmd(utils, 'execCmd', self.qcow2_compat_supported):
+ with FakeCmd(utils, 'watchCmd', qcow2_backing_format):
+ qemuimg.convert('source', 'target', None, dstFormat='qcow2',
+ backing='backing', backingFormat='qcow2')
--
To view, visit http://gerrit.ovirt.org/33354
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d6f254f5750fa249809469ecc764a73c91914d4
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimonce at redhat.com>
More information about the vdsm-patches
mailing list