convert_image and rebase_image are used frequently, add them to
kvm_vm.py and kvm_preprocessing.py
example:
- convert:
images +=" convert"
convert_image = yes
image_name_convert = converted_image
image_format_convert = qcow2
force_create_image_convert = yes
boot_drive_image1 = no
- rebase:
create_snapshot = yes
snapshot_name = snapshot
snapshot_format = qcow2
Signed-off-by: Suqin Huang <[email protected]>
---
client/tests/kvm/kvm_preprocessing.py | 29 +++++++++
client/tests/kvm/kvm_vm.py | 106 +++++++++++++++++++++++++++++++++
2 files changed, 135 insertions(+), 0 deletions(-)
diff --git a/client/tests/kvm/kvm_preprocessing.py
b/client/tests/kvm/kvm_preprocessing.py
index 515e3a5..bc80713 100644
--- a/client/tests/kvm/kvm_preprocessing.py
+++ b/client/tests/kvm/kvm_preprocessing.py
@@ -56,6 +56,35 @@ def preprocess_vm(test, params, env, name):
vm = kvm_vm.VM(name, params, test.bindir, env.get("address_cache"))
env.register_vm(name, vm)
+ # Convert vm
+ convert_image = False
+
+ if params.get("convert_image") == "yes":
+ logging.debug("Converting image...")
+ convert_image = True
+
+ if convert_image and not kvm_vm.convert_image(params, test.bindir):
+ raise error.TestFail("Could nt convert image")
+
+ # Create snapshot
+ create_snapshot = False
+
+ if params.get("create_snapshot") == "yes":
+ logging.debug("Create snapshot...")
+ create_snapshot = True
+ if create_snapshot and not kvm_vm.create_image(params, test.bindir):
+ raise error.TestFail("Could not create snapshot")
+
+ # Rebase vm
+ rebase_image = False
+
+ if params.get("rebase_image") == "yes":
+ logging.debug("Rebase snapshot to base image...")
+ rebase_image = True
+ if rebase_image and not kvm_vm.rebase_image(params, test.bindir):
+ raise error.TestFail("Could not rebase snapshot to base image")
+
+ # Start vm
start_vm = False
if params.get("restart_vm") == "yes":
diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
index 41f7491..6727a6d 100755
--- a/client/tests/kvm/kvm_vm.py
+++ b/client/tests/kvm/kvm_vm.py
@@ -215,12 +215,32 @@ def create_image(params, root_dir):
"qemu-img"))
qemu_img_cmd += " create"
+ if params.get("encrypted") == "yes":
+ qemu_img_cmd += " -e"
+
+ if params.get("create_snapshot") == "yes":
+ snapshot_name = params.get("snapshot_name")
+ snapshot_format = params.get("snapshot_format", "qcow2")
+ base_format = params.get("image_format")
+ base_filename = get_image_filename(params, root_dir)
+ params['image_name'] = snapshot_name
+ params['image_format'] = snapshot_format
+ qemu_img_cmd += " -b %s -F %s" % (base_filename, base_format)
+
format = params.get("image_format", "qcow2")
qemu_img_cmd += " -f %s" % format
image_filename = get_image_filename(params, root_dir)
qemu_img_cmd += " %s" % image_filename
+ preallocated = params.get("preallocated")
+ if preallocated is not None:
+ qemu_img_cmd += " -o preallocation=%s" % preallocated
+
+ cluster_size = params.get("cluster_size")
+ if cluster_size is not None:
+ qemu_img_cmd += " -o cluster_size=%s" % cluster_size
+
size = params.get("image_size", "10G")
qemu_img_cmd += " %s" % size
@@ -229,6 +249,92 @@ def create_image(params, root_dir):
return image_filename
+def convert_image(params, root_dir):
+ """
+ Convert image
+
+ @param params: A dict
+ @param root_dir: Base directory for relative filenames.
+
+ @note: Params should contain:
+ image_name -- the name of the image file to be converted
+ image_format -- the format of the the image to be convertged
+ convert_name -- the name of the image after convert
+ convert_format -- the format of the image after convert
+ """
+ qemu_img_cmd = kvm_utils.get_path(root_dir, params.get("qemu_img_binary",
+ "qemu-img"))
+ qemu_img_cmd += " convert"
+ if params.get("compressed") == "yes":
+ qemu_img_cmd += " -c"
+ if params.get("encrypted") == "yes":
+ qemu_img_cmd += " -e"
+
+ image_format = params.get("image_format", "qcow2")
+ qemu_img_cmd += " -f %s" % image_format
+
+ params_convert = kvm_utils.get_sub_dict(params,
+ params.get("images").split()[-1])
+ convert_format = params_convert.get("image_format", "qcow2")
+ qemu_img_cmd += " -O %s" % convert_format
+
+ base_filename = get_image_filename(params, root_dir)
+ convert_filename = get_image_filename(params_convert, root_dir)
+
+ qemu_img_cmd += " %s %s" % (base_filename, convert_filename)
+
+ try:
+ utils.system(qemu_img_cmd)
+ except error.CmdError, e:
+ logging.error("Could not convert image, convert failed:\n%s", str(e))
+ return None
+
+ logging.info("Convert %s to format %s" % (base_filename, convert_format))
+ return convert_filename
+
+
+def rebase_image(params, root_dir):
+ """
+ Rebase image:
+ @param params: A dict
+ @param root_dir: Base directory for relative filename
+
+ @note: params should contain:
+ snapshot_name -- image name to be rebased
+ image_name -- the base image name
+ image_format -- the format of base image
+ """
+ qemu_img_cmd = kvm_utils.get_path(root_dir, params.get("qemu_img_binary",
+ "qemu-img"))
+ qemu_img_cmd += " rebase"
+
+ mode = params.get("rebase_mode", "unsafe")
+ if mode == "unsafe":
+ qemu_img_cmd += " -u"
+
+ base_name = params.get("image_name")
+ base_format = params.get("image_format", "qcow2")
+ base_filename = get_image_filename(params, root_dir)
+ qemu_img_cmd += " -b %s -F %s" % (base_filename, image_format)
+
+ params_sn = kvm_utils.get_sub_dict(params,
params.get("images").split()[-1])
+ snapshot_name = params_sn.get("image_name")
+ snapshot_format = params_sn.get("image_format", "qcow2")
+ snapshot_filename = get_image_filename(params_sn, root_dir)
+
+ qemu_img_cmd += " -f %s %s" % (snapshot_format, snapshot_filename)
+
+ try:
+ utils.system(qemu_img_cmd)
+ except error.CmdError, e:
+ logging.error("Rebase image failed\n%s", str(e))
+ return None
+
+ logging.info("Image is rebase %s to %s" % (snapshot_name, base_name))
+
+ return base_filename
+
+
def remove_image(params, root_dir):
"""
Remove an image file.
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest