Exemple #1
0
 def check_result(result, status_error):
     """
     Check virt-v2v command result
     """
     libvirt.check_exit_status(result, status_error)
     output = result.stdout + result.stderr
     if checkpoint == 'empty_cdrom':
         if status_error:
             log_fail('Virsh dumpxml failed for empty cdrom image')
     elif not status_error:
         if output_mode == 'rhev':
             if not utils_v2v.import_vm_to_ovirt(
                     params, address_cache, timeout=v2v_timeout):
                 test.fail('Import VM failed')
         elif output_mode == 'libvirt':
             virsh.start(vm_name, debug=True)
         # Check guest following the checkpoint document after convertion
         logging.info('Checking common checkpoints for v2v')
         vmchecker = VMChecker(test, params, env)
         params['vmchecker'] = vmchecker
         if checkpoint not in ['GPO_AV', 'ovmf']:
             ret = vmchecker.run()
             if len(ret) == 0:
                 logging.info("All common checkpoints passed")
         # Check specific checkpoints
         if checkpoint == 'cdrom':
             virsh_session = utils_sasl.VirshSessionSASL(params)
             virsh_session_id = virsh_session.get_id()
             check_device_exist('cdrom', virsh_session_id)
         if checkpoint.startswith('vmtools'):
             check_vmtools(vmchecker.checker, checkpoint)
         if checkpoint == 'modprobe':
             check_modprobe(vmchecker.checker)
         if checkpoint == 'device_map':
             check_device_map(vmchecker.checker)
         # Merge 2 error lists
         error_list.extend(vmchecker.errors)
     log_check = utils_v2v.check_log(params, output)
     if log_check:
         log_fail(log_check)
     if len(error_list):
         test.fail('%d checkpoints failed: %s' %
                   (len(error_list), error_list))
 def check_result(result, status_error):
     """
     Check virt-v2v command result
     """
     libvirt.check_exit_status(result, status_error)
     output = result.stdout + result.stderr
     if not status_error:
         if output_mode == 'rhev':
             if not utils_v2v.import_vm_to_ovirt(
                     params, address_cache, timeout=v2v_timeout):
                 raise exceptions.TestFail('Import VM failed')
         elif output_mode == 'libvirt':
             virsh.start(vm_name)
         # Check guest following the checkpoint document after convertion
         logging.info('Checking common checkpoints for v2v')
         vmchecker = VMChecker(test, params, env)
         params['vmchecker'] = vmchecker
         if checkpoint not in ['GPO_AV', 'ovmf']:
             ret = vmchecker.run()
             if len(ret) == 0:
                 logging.info("All common checkpoints passed")
         # Check specific checkpoints
         if checkpoint == 'cdrom':
             virsh_session = utils_sasl.VirshSessionSASL(params)
             virsh_session_id = virsh_session.get_id()
             check_device_exist('cdrom', virsh_session_id)
         if checkpoint == 'vmtools':
             check_vmtools(vmchecker.checker)
         if checkpoint == 'GPO_AV':
             msg_list = [
                 'virt-v2v: warning: this guest has Windows Group Policy Objects',
                 'virt-v2v: warning: this guest has Anti-Virus \(AV\) software'
             ]
             for msg in msg_list:
                 if not utils_v2v.check_log(output, [msg]):
                     log_fail('Not found error message:"%s"' % msg)
         # Merge 2 error lists
         error_list.extend(vmchecker.errors)
     check_v2v_log(output, checkpoint)
     if len(error_list):
         raise exceptions.TestFail('%d checkpoints failed: %s' %
                                   (len(error_list), error_list))
Exemple #3
0
 def check_disks(ori_disks):
     """
     Check disk counts inside the VM
     """
     vmcheck = params.get("vmcheck")
     if vmcheck is None:
         raise error.TestError("VM check object is None")
     # Initialize windows boot up
     os_type = params.get("os_type", "linux")
     if os_type == "windows":
         virsh_session = utils_sasl.VirshSessionSASL(params)
         virsh_session_id = virsh_session.get_id()
         vmcheck.virsh_session_id = virsh_session_id
         vmcheck.init_windows()
         virsh_session.close()
     # Creatge VM session
     vmcheck.create_session()
     expected_disks = int(params.get("added_disks_count", "1")) - ori_disks
     logging.debug("Expect %s disks im VM after convert", expected_disks)
     # Get disk counts
     disks = 0
     if os_type == "linux":
         cmd = "lsblk |grep disk |wc -l"
         disks = int(vmcheck.session.cmd(cmd).strip())
     else:
         cmd = r"echo list disk > C:\list_disk.txt"
         vmcheck.session.cmd(cmd)
         cmd = r"diskpart /s C:\list_disk.txt"
         output = vmcheck.session.cmd(cmd).strip()
         logging.debug("Disks in VM: %s", output)
         disks = len(output.splitlines()) - 6
     logging.debug("Find %s disks in VM after convert", disks)
     vmcheck.session.close()
     if disks == expected_disks:
         logging.info("Disk counts is expected")
     else:
         raise error.TestFail("Disk counts is wrong")
    def setup_session(self):
        if self.virsh_session and self.virsh_session_id:
            logging.debug('virsh session %s has already been set',
                          self.virsh_session)
            return

        for index in range(RETRY_TIMES):
            logging.info('Trying %d times', index + 1)
            try:
                if self.target == "ovirt":
                    self.virsh_session = utils_sasl.VirshSessionSASL(
                        self.params)
                    self.virsh_session_id = self.virsh_session.get_id()
                else:
                    self.virsh_session = virsh.VirshPersistent(auto_close=True)
                    self.virsh_session_id = self.virsh_session.session_id
            except Exception as detail:
                logging.error(detail)
            else:
                break

        logging.debug('new virsh session %s is created', self.virsh_session)
        if not self.virsh_session_id:
            raise exceptions.TestError('Fail to create virsh session')
Exemple #5
0
        def vm_check(status_error):
            """
            Checking the VM
            """
            if status_error:
                return

            if output_mode == 'json' and not check_json_output(params):
                test.fail('check json output failed')
            if output_mode == 'local' and not check_local_output(params):
                test.fail('check local output failed')
            if output_mode in ['null', 'json', 'local']:
                return

            # vmchecker must be put before skip_vm_check in order to clean up
            # the VM.
            vmchecker = VMChecker(test, params, env)
            params['vmchecker'] = vmchecker
            if skip_vm_check == 'yes':
                logging.info('Skip checking vm after conversion: %s' %
                             skip_reason)
                return

            if output_mode == 'rhev':
                if not utils_v2v.import_vm_to_ovirt(
                        params, address_cache, timeout=v2v_timeout):
                    test.fail('Import VM failed')
            elif output_mode == 'libvirt':
                virsh.start(vm_name, debug=True)

            # Check guest following the checkpoint document after convertion
            logging.info('Checking common checkpoints for v2v')
            if checkpoint == 'ogac':
                # windows guests will reboot at any time after qemu-ga is
                # installed. The process cannot be controled. In order to
                # don't break vmchecker.run() process, It's better to put
                # check_windows_ogac before vmchecker.run(). Because in
                # check_windows_ogac, it waits until rebooting completes.
                vmchecker.checker.create_session()
                if os_type == 'windows':
                    check_windows_ogac(vmchecker.checker)
                else:
                    check_linux_ogac(vmchecker.checker)
            ret = vmchecker.run()
            if len(ret) == 0:
                logging.info("All common checkpoints passed")
            # Check specific checkpoints
            if checkpoint == 'cdrom':
                virsh_session = utils_sasl.VirshSessionSASL(params)
                virsh_session_id = virsh_session.get_id()
                check_device_exist('cdrom', virsh_session_id)
                virsh_session.close()
            if checkpoint.startswith('vmtools'):
                check_vmtools(vmchecker.checker, checkpoint)
            if checkpoint == 'modprobe':
                check_modprobe(vmchecker.checker)
            if checkpoint == 'device_map':
                check_device_map(vmchecker.checker)
            if checkpoint == 'resume_swap':
                check_resume_swap(vmchecker.checker)
            if checkpoint == 'rhev_file':
                check_rhev_file_exist(vmchecker.checker)
            if checkpoint == 'file_architecture':
                check_file_architecture(vmchecker.checker)
            if checkpoint == 'ubuntu_tools':
                check_ubuntools(vmchecker.checker)
            if checkpoint == 'without_default_net':
                if virsh.net_state_dict()[net_name]['active']:
                    log_fail("Bridge virbr0 already started during conversion")
            # Merge 2 error lists
            error_list.extend(vmchecker.errors)
Exemple #6
0
def run(test, params, env):
    """
    Check VM after conversion
    """
    target = params.get('target')
    vm_name = params.get('main_vm')
    os_type = params.get('os_type', 'linux')
    target = params.get('target', 'libvirt')

    def log_err(errs, msg):
        logging.error(msg)
        errs.append(msg)

    def check_linux_vm(check_obj):
        """
        Check linux guest after v2v convert.
        """
        # Create ssh session for linux guest
        check_obj.create_session()

        errs = []
        # 1. Check OS vender and version
        logging.info("Check guest os info")
        os_info = check_obj.get_vm_os_info()
        os_vendor = check_obj.get_vm_os_vendor()
        if os_vendor == 'Red Hat':
            os_version = os_info.split()[6]
        else:
            err_msg = "Only support RHEL for now"
            log_err(errs, err_msg)

        # 2. Check OS kernel
        logging.info("Check guest kernel")
        kernel_version = check_obj.get_vm_kernel()
        if re.search('xen', kernel_version, re.IGNORECASE):
            err_msg = "Still find xen kernel"
            log_err(errs, err_msg)

        # 3. Check disk partition
        logging.info("Check 'vdX' in disk partiton")
        parted_info = check_obj.get_vm_parted()
        if os_version != '3':
            if not re.findall('/dev/vd\S+', parted_info):
                err_msg = "Not find vdX"
                log_err(errs, err_msg)

        # 4. Check virtio_net in /etc/modprobe.conf
        # BTW, this file is removed on RHEL6 and later releases
        logging.info("Check virtio_net module in modprobe.conf")
        modprobe_conf = check_obj.get_vm_modprobe_conf()
        if not re.search('No such file', modprobe_conf, re.IGNORECASE):
            virtio_mod = re.findall(r'(?m)^alias.*virtio', modprobe_conf)
            net_blk_mod = re.findall(r'(?m)^alias\s+scsi|(?m)^alias\s+eth',
                                     modprobe_conf)
            if len(virtio_mod) != len(net_blk_mod):
                err_msg = "Unexpected content in modprobe.conf"
                log_err(errs, err_msg)

        # 5. Check kernel modules
        # BTW, RHEL3 not support virtio, so it may use 'e1000' and 'ide'
        logging.info("Check kernel modules")
        modules = check_obj.get_vm_modules()
        if os_version == '3':
            if not re.search("e1000|^ide", modules, re.IGNORECASE):
                err_msg = "Not find e1000|^ide module"
                log_err(errs, err_msg)
        elif not re.search("virtio", modules, re.IGNORECASE):
            err_msg = "Not find virtio module"
            log_err(errs, err_msg)

        # 6. Check virtio PCI devices
        if os_version != '3':
            logging.info("Check virtio PCI devices")
            pci = check_obj.get_vm_pci_list()
            if (re.search('Virtio network', pci, re.IGNORECASE)
                    and re.search('Virtio block', pci, re.IGNORECASE)):
                if (target != "ovirt" and
                        not re.search('Virtio memory', pci, re.IGNORECASE)):
                    err_msg = "Not find Virtio memory balloon"
                    log_err(errs, err_msg)
            else:
                err_msg = "Not find Virtio network and block devices"
                log_err(errs, err_msg)

        # 7. Check tty
        logging.info("Check tty")
        tty = check_obj.get_vm_tty()
        if re.search('[xh]vc0', tty, re.IGNORECASE):
            err_msg = "Unexpected [xh]vc0"
            log_err(errs, err_msg)

        # 8. Check video
        logging.info("Check video")
        video = check_obj.get_vm_video()
        if target == 'ovirt':
            if not re.search('qxl', video, re.IGNORECASE):
                err_msg = "Not find QXL driver after convert vm to oVirt"
                log_err(errs, err_msg)
        else:
            # dump VM XML
            cmd = "virsh dumpxml %s |grep -A 3 '<video>'" % vm_name
            status, output = commands.getstatusoutput(cmd)
            if status:
                raise error.TestError(vm_name, output)

            video_model = ""
            video_type = re.search("type='[a-z]*'", output, re.IGNORECASE)
            if video_type:
                video_model = eval(video_type.group(0).split('=')[1])

            if re.search('el7', kernel_version):
                if 'cirrus' in output:
                    if not re.search('kms', video, re.IGNORECASE):
                        err_msg = "Not find 'kms' for 'cirrus' video"
                        log_err(errs, err_msg)
                else:
                    if not re.search(video_model, video, re.IGNORECASE):
                        err_msg = "Not find '%s' video" % video_model
                        log_err(errs, err_msg)
            else:
                if not re.search(video_model, video, re.IGNORECASE):
                    err_msg = "Not find '%s' video" % video_model
                    log_err(errs, err_msg)

        # 9. Check device map
        logging.info("Check device map")
        dev_map = ""
        if re.search('el7', kernel_version):
            dev_map = '/boot/grub2/device.map'
        else:
            dev_map = '/boot/grub/device.map'
        if not check_obj.get_grub_device(dev_map):
            err_msg = "Not find vdX disk in device map"
            log_err(errs, err_msg)

        if errs:
            raise error.TestFail("Check failed: %s" % errs)
        else:
            logging.info("All check passed")

    def check_windows_vm(check_obj):
        """
        Check windows guest after v2v convert.
        """
        match_image_timeout = 300
        logging.info("Initialize windows in %s seconds", match_image_timeout)
        compare_screenshot_vms = ["win2003", "win2008", "win2008r2", "win7"]
        timeout_msg = "Not match expected images in %s" % match_image_timeout
        timeout_msg += " seconds, try to login VM directly"
        match_image_list = []
        if check_obj.os_version in compare_screenshot_vms:
            image_name_list = params.get("images_for_match", '').split(',')
            for image_name in image_name_list:
                match_image = os.path.join(data_dir.get_data_dir(), image_name)
                if not os.path.exists(match_image):
                    raise error.TestError("%s not exist" % match_image)
                match_image_list.append(match_image)
            img_match_ret = check_obj.wait_for_match(
                match_image_list, timeout=match_image_timeout)
            if img_match_ret < 0:
                logging.error(timeout_msg)
            else:
                if check_obj.os_version == "win2003":
                    if img_match_ret == 0:
                        check_obj.click_left_button()
                        # VM may have no response in awhile
                        time.sleep(20)
                        check_obj.click_left_button()
                        check_obj.click_tab_enter()
                    elif img_match_ret == 1:
                        check_obj.click_left_button()
                        time.sleep(20)
                        check_obj.click_left_button()
                        check_obj.click_tab_enter()
                        check_obj.click_left_button()
                        check_obj.send_win32_key('VK_RETURN')
                    else:
                        pass
                elif check_obj.os_version in ["win7", "win2008r2"]:
                    if img_match_ret in [0, 1]:
                        check_obj.click_left_button()
                        check_obj.click_left_button()
                        check_obj.send_win32_key('VK_TAB')
                        check_obj.click_tab_enter()
                elif check_obj.os_version == "win2008":
                    if img_match_ret in [0, 1]:
                        check_obj.click_tab_enter()
                        check_obj.click_install_driver()
                        check_obj.move_mouse((0, -50))
                        check_obj.click_left_button()
                        check_obj.click_tab_enter()
                    else:
                        check_obj.click_install_driver()
        else:
            # No need sendkey/click button for Win8, Win8.1, Win2012, Win2012r2
            # So give a long timeout(10 min)for these VMs
            check_obj.timeout = 600
            logging.info("%s is booting up ...", check_obj.os_version)
        # Try to create nc/telnet session for windows guest
        check_obj.create_session()

        errs = []
        # 1. Check viostor file
        logging.info("Check windows viostor info")
        output = check_obj.get_viostor_info()
        if not output:
            err_msg = "Windows viostor info check failed"
            log_err(errs, err_msg)

        # 2. Check Red Hat drivers
        logging.info("Check Red Hat drivers")
        win_dirves = check_obj.get_driver_info()
        virtio_drivers = [
            "Red Hat VirtIO SCSI", "Red Hat VirtIO Ethernet Adapte"
        ]
        for driver in virtio_drivers:
            if driver in win_dirves:
                logging.info("Find driver: %s", driver)
            else:
                err_msg = "Not find driver: %s" % driver
                errs.append(err_msg)
                log_err(errs, err_msg)

        # TODO: This part should be update after bug fix
        # Now, virt-v2v has bugs about video driver, all guests will
        # vga video after convirt except windows2008r2.
        video_driver = "vga"
        if target == "ovirt":
            video_driver = "qxl"
        win_dirves = check_obj.get_driver_info(signed=False)
        if video_driver in win_dirves:
            logging.info("Find driver: %s", video_driver)
        else:
            err_msg = "Not find driver: %s" % video_driver
            logging.error(err_msg)
            #log_err(errs, err_msg)

        # 3. Renew network
        logging.info("Renew network for windows guest")
        if not check_obj.get_network_restart():
            err_msg = "Renew network failed"
            log_err(errs, err_msg)

        if errs:
            raise error.TestFail("Check failed: %s" % errs)
        else:
            logging.info("All check passed")

    check_obj = utils_v2v.VMCheck(test, params, env)
    try:
        virsh_session_id = None
        if target == "ovirt":
            virsh_session = utils_sasl.VirshSessionSASL(params)
            virsh_session_id = virsh_session.get_id()
        check_obj.virsh_session_id = virsh_session_id
        if os_type == "linux":
            check_linux_vm(check_obj)
        else:
            check_windows_vm(check_obj)
    finally:
        if check_obj:
            if check_obj.session:
                check_obj.session.close()
            check_obj.cleanup()
 def check_result(result, status_error):
     """
     Check virt-v2v command result
     """
     libvirt.check_exit_status(result, status_error)
     output = result.stdout_text + result.stderr_text
     if checkpoint == 'empty_cdrom':
         if status_error:
             log_fail('Virsh dumpxml failed for empty cdrom image')
     elif not status_error:
         vmchecker = VMChecker(test, params, env)
         params['vmchecker'] = vmchecker
         if output_mode == 'rhev':
             if not utils_v2v.import_vm_to_ovirt(params, address_cache,
                                                 timeout=v2v_timeout):
                 test.fail('Import VM failed')
         elif output_mode == 'libvirt':
             virsh.start(vm_name, debug=True)
         # Check guest following the checkpoint document after convertion
         logging.info('Checking common checkpoints for v2v')
         if skip_vm_check != 'yes':
             if checkpoint == 'ogac':
                 # windows guests will reboot at any time after qemu-ga is
                 # installed. The process cannot be controled. In order to
                 # don't break vmchecker.run() process, It's better to put
                 # check_windows_ogac before vmchecker.run(). Because in
                 # check_windows_ogac, it waits until rebooting completes.
                 vmchecker.checker.create_session()
                 if os_type == 'windows':
                     check_windows_ogac(vmchecker.checker)
                 else:
                     check_linux_ogac(vmchecker.checker)
             ret = vmchecker.run()
             if len(ret) == 0:
                 logging.info("All common checkpoints passed")
         else:
             logging.info(
                 'Skip checking vm after conversion: %s' %
                 skip_reason)
         # Check specific checkpoints
         if checkpoint == 'cdrom':
             virsh_session = utils_sasl.VirshSessionSASL(params)
             virsh_session_id = virsh_session.get_id()
             check_device_exist('cdrom', virsh_session_id)
             virsh_session.close()
         if checkpoint.startswith('vmtools'):
             check_vmtools(vmchecker.checker, checkpoint)
         if checkpoint == 'modprobe':
             check_modprobe(vmchecker.checker)
         if checkpoint == 'device_map':
             check_device_map(vmchecker.checker)
         if checkpoint == 'resume_swap':
             check_resume_swap(vmchecker.checker)
         if checkpoint == 'rhev_file':
             check_rhev_file_exist(vmchecker.checker)
         if checkpoint == 'file_architecture':
             check_file_architecture(vmchecker.checker)
         if checkpoint == 'ubuntu_tools':
             check_ubuntools(vmchecker.checker)
         if checkpoint == 'without_default_net':
             if virsh.net_state_dict()[net_name]['active']:
                 log_fail("Bridge virbr0 already started during conversion")
         # Merge 2 error lists
         error_list.extend(vmchecker.errors)
     log_check = utils_v2v.check_log(params, output)
     if log_check:
         log_fail(log_check)
     if len(error_list):
         test.fail('%d checkpoints failed: %s' %
                   (len(error_list), error_list))
Exemple #8
0
def run(test, params, env):
    """
    Check VM after conversion
    """
    target = params.get('target')
    vm_name = params.get('main_vm')
    os_type = params.get('os_type', 'linux')
    target = params.get('target', 'libvirt')

    def log_err(errs, msg):
        logging.error(msg)
        errs.append(msg)

    def check_linux_vm(check_obj):
        """
        Check linux guest after v2v convert.
        """
        # Create ssh session for linux guest
        check_obj.create_session()

        errs = []
        # 1. Check OS vender and version
        logging.info("Check guest os info")
        os_info = check_obj.get_vm_os_info()
        os_vendor = check_obj.get_vm_os_vendor()
        if os_vendor == 'Red Hat':
            os_version = os_info.split()[6]
        else:
            err_msg = "Only support RHEL for now"
            log_err(errs, err_msg)

        # 2. Check OS kernel
        logging.info("Check guest kernel")
        kernel_version = check_obj.get_vm_kernel()
        if re.search('xen', kernel_version, re.IGNORECASE):
            err_msg = "Still find xen kernel"
            log_err(errs, err_msg)

        # 3. Check disk partition
        logging.info("Check 'vdX' in disk partiton")
        parted_info = check_obj.get_vm_parted()
        if os_version != '3':
            if not re.findall('/dev/vd\S+', parted_info):
                err_msg = "Not find vdX"
                log_err(errs, err_msg)

        # 4. Check virtio_net in /etc/modprobe.conf
        # BTW, this file is removed on RHEL6 and later releases
        logging.info("Check virtio_net module in modprobe.conf")
        modprobe_conf = check_obj.get_vm_modprobe_conf()
        if not re.search('No such file', modprobe_conf, re.IGNORECASE):
            virtio_mod = re.findall(r'(?m)^alias.*virtio', modprobe_conf)
            net_blk_mod = re.findall(r'(?m)^alias\s+scsi|(?m)^alias\s+eth',
                                     modprobe_conf)
            if len(virtio_mod) != len(net_blk_mod):
                err_msg = "Unexpected content in modprobe.conf"
                log_err(errs, err_msg)

        # 5. Check kernel modules
        # BTW, RHEL3 not support virtio, so it may use 'e1000' and 'ide'
        logging.info("Check kernel modules")
        modules = check_obj.get_vm_modules()
        if os_version == '3':
            if not re.search("e1000|^ide", modules, re.IGNORECASE):
                err_msg = "Not find e1000|^ide module"
                log_err(errs, err_msg)
        elif not re.search("virtio", modules, re.IGNORECASE):
            err_msg = "Not find virtio module"
            log_err(errs, err_msg)

        # 6. Check virtio PCI devices
        if os_version != '3':
            logging.info("Check virtio PCI devices")
            pci = check_obj.get_vm_pci_list()
            if (re.search('Virtio network', pci, re.IGNORECASE)
                    and re.search('Virtio block', pci, re.IGNORECASE)):
                if (target != "ovirt" and
                        not re.search('Virtio memory', pci, re.IGNORECASE)):
                    err_msg = "Not find Virtio memory balloon"
                    log_err(errs, err_msg)
            else:
                err_msg = "Not find Virtio network and block devices"
                log_err(errs, err_msg)

        # 7. Check tty
        logging.info("Check tty")
        tty = check_obj.get_vm_tty()
        if re.search('[xh]vc0', tty, re.IGNORECASE):
            err_msg = "Unexpected [xh]vc0"
            log_err(errs, err_msg)

        # 8. Check video
        logging.info("Check video")
        video = check_obj.get_vm_video()
        if target == 'ovirt':
            if not re.search('qxl', video, re.IGNORECASE):
                err_msg = "Not find QXL driver after convert vm to oVirt"
                log_err(errs, err_msg)
        else:
            # dump VM XML
            cmd = "virsh dumpxml %s |grep -A 3 '<video>'" % vm_name
            status, output = commands.getstatusoutput(cmd)
            if status:
                raise error.TestError(vm_name, output)

            video_model = ""
            video_type = re.search("type='[a-z]*'", output, re.IGNORECASE)
            if video_type:
                video_model = eval(video_type.group(0).split('=')[1])

            if re.search('el7', kernel_version):
                if 'cirrus' in output:
                    if not re.search('kms', video, re.IGNORECASE):
                        err_msg = "Not find 'kms' for 'cirrus' video"
                        log_err(errs, err_msg)
                else:
                    if not re.search(video_model, video, re.IGNORECASE):
                        err_msg = "Not find '%s' video" % video_model
                        log_err(errs, err_msg)
            else:
                if not re.search(video_model, video, re.IGNORECASE):
                    err_msg = "Not find '%s' video" % video_model
                    log_err(errs, err_msg)

        # 9. Check device map
        logging.info("Check device map")
        dev_map = ""
        if re.search('el7', kernel_version):
            dev_map = '/boot/grub2/device.map'
        else:
            dev_map = '/boot/grub/device.map'
        if not check_obj.get_grub_device(dev_map):
            err_msg = "Not find vdX disk in device map"
            log_err(errs, err_msg)

        if errs:
            raise error.TestFail("Check failed: %s" % errs)
        else:
            logging.info("All check passed")

    def check_windows_vm(check_obj):
        """
        Check windows guest after v2v convert.
        """
        # Initialize windows boot up
        check_obj.init_windows()

        # Create nc/telnet session for windows guest
        check_obj.create_session()

        errs = []
        # 1. Check viostor file
        logging.info("Check windows viostor info")
        output = check_obj.get_viostor_info()
        if not output:
            err_msg = "Windows viostor info check failed"
            log_err(errs, err_msg)

        # 2. Check Red Hat drivers
        logging.info("Check Red Hat drivers")
        win_dirves = check_obj.get_driver_info()
        virtio_drivers = [
            "Red Hat VirtIO SCSI", "Red Hat VirtIO Ethernet Adapte"
        ]
        for driver in virtio_drivers:
            if driver in win_dirves:
                logging.info("Find driver: %s", driver)
            else:
                err_msg = "Not find driver: %s" % driver
                errs.append(err_msg)
                log_err(errs, err_msg)

        # TODO: This part should be update after bug fix
        # Now, virt-v2v has bugs about video driver, all guests will
        # vga video after convirt except windows2008r2.
        video_driver = "vga"
        if target == "ovirt":
            video_driver = "qxl"
        win_dirves = check_obj.get_driver_info(signed=False)
        if video_driver in win_dirves:
            logging.info("Find driver: %s", video_driver)
        else:
            err_msg = "Not find driver: %s" % video_driver
            logging.error(err_msg)
            #log_err(errs, err_msg)

        # 3. Renew network
        logging.info("Renew network for windows guest")
        if not check_obj.get_network_restart():
            err_msg = "Renew network failed"
            log_err(errs, err_msg)

        if errs:
            raise error.TestFail("Check failed: %s" % errs)
        else:
            logging.info("All check passed")

    check_obj = utils_v2v.VMCheck(test, params, env)
    virsh_session = None
    try:
        virsh_session_id = None
        if target == "ovirt":
            virsh_session = utils_sasl.VirshSessionSASL(params)
            virsh_session_id = virsh_session.get_id()
        check_obj.virsh_session_id = virsh_session_id
        if os_type == "linux":
            check_linux_vm(check_obj)
        else:
            check_windows_vm(check_obj)
    finally:
        if virsh_session:
            virsh_session.close()
        if check_obj:
            if check_obj.session:
                check_obj.session.close()
            check_obj.cleanup()
Exemple #9
0
        def vm_check(status_error):
            """
            Checking the VM
            """
            if status_error:
                return

            if output_mode == 'json' and not check_json_output(params):
                test.fail('check json output failed')
            if output_mode == 'local' and not check_local_output(params):
                test.fail('check local output failed')
            if output_mode in ['null', 'json', 'local']:
                return

            # vmchecker must be put before skip_vm_check in order to clean up
            # the VM.
            vmchecker = VMChecker(test, params, env)
            params['vmchecker'] = vmchecker
            if skip_vm_check == 'yes':
                logging.info('Skip checking vm after conversion: %s' %
                             skip_reason)
                return

            if output_mode == 'rhev':
                if not utils_v2v.import_vm_to_ovirt(
                        params, address_cache, timeout=v2v_timeout):
                    test.fail('Import VM failed')
            elif output_mode == 'libvirt':
                virsh.start(vm_name, debug=True)

            # Check guest following the checkpoint document after convertion
            logging.info('Checking common checkpoints for v2v')
            if 'ogac' in checkpoint:
                # windows guests will reboot at any time after qemu-ga is
                # installed. The process cannot be controled. In order to
                # don't break vmchecker.run() process, It's better to put
                # check_windows_ogac before vmchecker.run(). Because in
                # check_windows_ogac, it waits until rebooting completes.
                vmchecker.checker.create_session()
                if os_type == 'windows':
                    services = ['qemu-ga']
                    V2V_UNSUPPORT_RHEV_APT_VER = "[virt-v2v-1.43.3-4.el9,)"
                    if not utils_v2v.multiple_versions_compare(
                            V2V_UNSUPPORT_RHEV_APT_VER):
                        services.append('rhev-apt')
                    if 'rhv-guest-tools' in os.getenv('VIRTIO_WIN'):
                        services.append('spice-ga')
                    for ser in services:
                        check_windows_service(vmchecker.checker, ser)
                else:
                    check_linux_ogac(vmchecker.checker)
            if 'mac_ip' in checkpoint:
                check_static_ip_conf(vmchecker.checker)
            ret = vmchecker.run()
            if len(ret) == 0:
                logging.info("All common checkpoints passed")
            # Check specific checkpoints
            if 'ogac' in checkpoint and 'signature' in checkpoint:
                check_windows_signature(vmchecker.checker, r'c:\rhev-apt.exe')
            if 'cdrom' in checkpoint:
                virsh_session = utils_sasl.VirshSessionSASL(params)
                virsh_session_id = virsh_session.get_id()
                check_device_exist('cdrom', virsh_session_id)
                virsh_session.close()
            if 'vmtools' in checkpoint:
                check_vmtools(vmchecker.checker, checkpoint)
            if 'modprobe' in checkpoint:
                check_modprobe(vmchecker.checker)
            if 'device_map' in checkpoint:
                check_device_map(vmchecker.checker)
            if 'resume_swap' in checkpoint:
                check_resume_swap(vmchecker.checker)
            if 'rhev_file' in checkpoint:
                check_rhev_file_exist(vmchecker.checker)
            if 'file_architecture' in checkpoint:
                check_file_architecture(vmchecker.checker)
            if 'ubuntu_tools' in checkpoint:
                check_ubuntools(vmchecker.checker)
            if 'vmware_tools' in checkpoint:
                check_windows_vmware_tools(vmchecker.checker)
            if 'without_default_net' in checkpoint:
                if virsh.net_state_dict()[net_name]['active']:
                    log_fail("Bridge virbr0 already started during conversion")
            if 'rhsrvany_checksum' in checkpoint:
                check_rhsrvany_checksums(vmchecker.checker)
            # Merge 2 error lists
            error_list.extend(vmchecker.errors)
            # Virtio drivers will not be installed without virtio-win setup
            if 'virtio_win_unset' in checkpoint:
                missing_list = params.get('missing').split(',')
                expect_errors = ['Not find driver: ' + x for x in missing_list]
                logging.debug('Expect errors: %s' % expect_errors)
                logging.debug('Actual errors: %s' % error_list)
                if set(error_list) == set(expect_errors):
                    error_list[:] = []
                else:
                    logging.error('Virtio drivers not meet expectation')