def run(test, params, env):
    """
    Test command: virsh domxml-from-native.

    Convert native guest configuration format to domain XML format.
    1.Prepare test environment.
    2.When the libvirtd == "off", stop the libvirtd service.
    3.Perform virsh domxml-from-native operation.
    4.Recover test environment.(If the libvirtd service is stopped ,start
      the libvirtd service.)
    5.Confirm the test result.
    """
    vm_name = params.get("main_vm")
    vm = env.get_vm(vm_name)
    vm.verify_alive()

    def virsh_convxml(guest_args):
        """
        Put dumpxml vm'infomation to a file

        :param guest_args : File which will save config information.
        """
        pid = vm.get_pid()
        cmdline = process.run("cat -v /proc/%d/cmdline" % pid).stdout
        cmdline = re.sub(r'\^@', ' ', cmdline)
        cmdline_tmp = re.sub(r'\s-drive\s[^\s]+', '\s', cmdline)
        with open(guest_args, 'w') as guest_file:
            guest_file.write(cmdline_tmp)

    libvirtd = params.get("libvirtd")
    dfn_format = params.get("dfn_format")
    guest_args = params.get("dfn_guest_args", "")
    invalid_guest_args = params.get("dfn_invalid_guest_args")
    status_error = "yes" == params.get("status_error", "no")

    # put vm's information to a file
    if guest_args != "":
        if os.path.dirname(guest_args) is "":
            guest_args = os.path.join(test.tmpdir, guest_args)
        virsh_convxml(guest_args)

    # libvirtd off
    if libvirtd == "off":
        utils_libvirtd.libvirtd_stop()

    # Ignore exception with ignore_status=True.
    ret = virsh.domxml_from_native(dfn_format,
                                   guest_args,
                                   invalid_guest_args,
                                   ignore_status=True)
    utlv.check_exit_status(ret, status_error)
    # recover libvirtd service start
    if libvirtd == "off":
        utils_libvirtd.libvirtd_start()

    # clean up
    if os.path.exists(guest_args):
        os.remove(guest_args)
def run_virsh_domxml_from_native(test, params, env):
    """
    Test command: virsh domxml-from-native.

    Convert native guest configuration format to domain XML format.
    1.Prepare test environment.
    2.When the libvirtd == "off", stop the libvirtd service.
    3.Perform virsh domxml-from-native operation.
    4.Recover test environment.(If the libvirtd service is stopped ,start
      the libvirtd service.)
    5.Confirm the test result.
    """
    vm_name = params.get("main_vm")
    vm = env.get_vm(vm_name)
    vm.verify_alive()

    def virsh_convxml(guest_args):
        """
        Put dumpxml vm'infomation to a file

        :param guest_args : File which will save config information.
        """
        pid = vm.get_pid()
        cmdline = utils.system_output("cat -v /proc/%d/cmdline" % pid)
        cmdline = re.sub(r'\^@', ' ', cmdline)
        cmdline_tmp = re.sub(r'\s-drive\s[^\s]+', '\s', cmdline)
        guest_file = file(guest_args, 'w')
        guest_file.write(cmdline_tmp)
        guest_file.close()

    libvirtd = params.get("libvirtd")
    dfn_format = params.get("dfn_format")
    guest_args = params.get("dfn_guest_args", "")
    invalid_guest_args = params.get("dfn_invalid_guest_args")
    status_error = params.get("status_error")

    # put vm's information to a file
    if guest_args != "":
        if os.path.dirname(guest_args) is "":
            guest_args = os.path.join(test.tmpdir, guest_args)
        virsh_convxml(guest_args)

    # libvirtd off
    if libvirtd == "off":
        utils_libvirtd.libvirtd_stop()

    # Ignore exception with ignore_status=True.
    ret = virsh.domxml_from_native(dfn_format, guest_args, invalid_guest_args,
                                   ignore_status=True)
    status = ret.exit_status

    # recover libvirtd service start
    if libvirtd == "off":
        utils_libvirtd.libvirtd_start()

    # clean up
    if os.path.exists(guest_args):
        os.remove(guest_args)

    # check status_error
    if status_error == "yes":
        if status == 0:
            raise error.TestFail("Run successfully with wrong command!")
    elif status_error == "no":
        if status != 0:
            raise error.TestFail("Run failed with right command")
Exemple #3
0
def run_virsh_domxml_from_native(test, params, env):
    """
    Test command: virsh domxml-from-native.

    Convert native guest configuration format to domain XML format.
    1.Prepare test environment.
    2.When the libvirtd == "off", stop the libvirtd service.
    3.Perform virsh domxml-from-native operation.
    4.Recover test environment.(If the libvirtd service is stopped ,start
      the libvirtd service.)
    5.Confirm the test result.
    """
    vm_name = params.get("main_vm")
    vm = env.get_vm(vm_name)
    vm.verify_alive()

    def virsh_convxml(guest_args):
        """
        Put dumpxml vm'infomation to a file

        @param: guest_args : File which will save config infomation.
        """
        pid = vm.get_pid()
        cmdline = utils.system_output("cat -v /proc/%d/cmdline" % pid)
        cmdline = re.sub(r'\^@', ' ', cmdline)
        cmdline_tmp = re.sub(r'\s-drive\s[^\s]+', '\s', cmdline)
        guest_file = file(guest_args, 'w')
        guest_file.write(cmdline_tmp)
        guest_file.close()

    libvirtd = params.get("libvirtd")
    dfn_format = params.get("dfn_format")
    guest_args = params.get("dfn_guest_args", "")
    invalid_guest_args = params.get("dfn_invalid_guest_args")
    status_error = params.get("status_error")

    #put vm's infomation to a file
    if guest_args != "":
        if os.path.dirname(guest_args) is "":
            guest_args = os.path.join(test.tmpdir, guest_args)
        virsh_convxml(guest_args)

    #libvirtd off
    if libvirtd == "off":
        utils_libvirtd.libvirtd_stop()

    #Ignore exception with ignore_status=True.
    ret = virsh.domxml_from_native(dfn_format,
                                   guest_args,
                                   invalid_guest_args,
                                   ignore_status=True)
    status = ret.exit_status

    #recover libvirtd service start
    if libvirtd == "off":
        utils_libvirtd.libvirtd_start()

    #clean up
    if os.path.exists(guest_args):
        os.remove(guest_args)

    #check status_error
    if status_error == "yes":
        if status == 0:
            raise error.TestFail("Run successfully with wrong command!")
    elif status_error == "no":
        if status != 0:
            raise error.TestFail("Run failed with right command")
def run(test, params, env):
    """
    Test command: virsh domxml-from-native.

    Convert native guest configuration format to domain XML format.
    1.Prepare test environment.
    2.When the libvirtd == "off", stop the libvirtd service.
    3.Perform virsh domxml-from-native operation.
    4.Recover test environment.(If the libvirtd service is stopped ,start
      the libvirtd service.)
    5.Confirm the test result.
    """
    vm_name = params.get("main_vm")
    vm = env.get_vm(vm_name)
    vm.verify_alive()

    def virsh_convxml(guest_args):
        """
        Put dumpxml vm'infomation to a file

        :param guest_args : File which will save config information.
        """
        pid = vm.get_pid()
        cmdline = process.run("cat -v /proc/%d/cmdline" % pid).stdout_text
        cmdline = re.sub(r'\^@', ' ', cmdline)
        cmdline_tmp = re.sub(r'\s-drive\s[^\s]+', '\s', cmdline)

        # Libvirt requires the binary path for domxml-from-native to succeed
        # /proc/pid/cmdline would give qemu cmdline with binary without
        # absolute path
        qemu_bin = ['qemu-system-ppc64', 'qemu-system-x86_64', 'qemu-kvm', 'kvm']
        change_bin = ''
        qemu_binary = ''
        for each_bin in qemu_bin:
            if each_bin in cmdline_tmp:
                qemu_binary = each_bin
                break
        for each_opt in cmdline_tmp.split():
            if qemu_binary in each_opt:
                change_bin = each_opt
                break
        exec_str = "export PATH=$PATH:/usr/libexec;which %s"
        qemu_binary = process.getoutput(exec_str % qemu_binary, shell=True)
        if change_bin.strip() != qemu_binary.strip():
            cmdline_tmp = re.sub(change_bin, qemu_binary, cmdline_tmp)

        with open(guest_args, 'w') as guest_file:
            guest_file.write(cmdline_tmp)

    libvirtd = params.get("libvirtd")
    dfn_format = params.get("dfn_format")
    guest_args = params.get("dfn_guest_args", "")
    invalid_guest_args = params.get("dfn_invalid_guest_args")
    status_error = "yes" == params.get("status_error", "no")

    # put vm's information to a file
    if guest_args != "":
        if os.path.dirname(guest_args) is "":
            guest_args = os.path.join(data_dir.get_tmp_dir(), guest_args)
        virsh_convxml(guest_args)

    # libvirtd off
    if libvirtd == "off":
        utils_libvirtd.libvirtd_stop()

    # Ignore exception with ignore_status=True.
    ret = virsh.domxml_from_native(dfn_format, guest_args, invalid_guest_args,
                                   ignore_status=True, debug=True)
    utlv.check_exit_status(ret, status_error)
    # recover libvirtd service start
    if libvirtd == "off":
        utils_libvirtd.libvirtd_start()

    # clean up
    if os.path.exists(guest_args):
        os.remove(guest_args)