On Wed, Feb 23, 2011 at 06:24:42PM +0800, Suqin Huang wrote:
> convert_image and rebase_image are used frequently, add them to 
> kvm_vm.py and kvm_preprocessing.py

Patch looks good, little commit.
Can you add some usage of this interface to commitlog ? configure examples ?

> 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..95c14d8 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_image")
> +        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"

Need some default value here, otherwise, the config would so long.
             compressed_image1 = "yes"
             encrypted_image1 = "yes"
             cluster_size_image1 = ..
             preallocation_image1 = ..

> +
> +    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

              rebase_mode --

> +    """
> +    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))

                     "Image '%s' is rebased to %s"
> +
> +    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
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to