Exemple #1
0
    def check_linux_ogac(vmcheck):
        """
        Check qemu-guest-agent service in VM

        :param vmcheck: VMCheck object for vm checking
        """
        def get_pkgs(pkg_path):
            """
            Get all qemu-guest-agent pkgs
            """
            pkgs = []
            for _, _, files in os.walk(pkg_path):
                for file_name in files:
                    pkgs.append(file_name)
            return pkgs

        def get_pkg_version_vm():
            """
            Get qemu-guest-agent version in VM
            """
            vendor = vmcheck.get_vm_os_vendor()
            if vendor in ['Ubuntu', 'Debian']:
                cmd = 'dpkg -l qemu-guest-agent'
            else:
                cmd = 'rpm -q qemu-guest-agent'
            _, output = vmcheck.run_cmd(cmd)

            pkg_ver_ptn = [
                r'qemu-guest-agent +[0-9]+:(.*?dfsg.*?) +',
                r'qemu-guest-agent-(.*?)\.x86_64'
            ]

            for ptn in pkg_ver_ptn:
                if re.search(ptn, output):
                    return re.search(ptn, output).group(1)
            return ''

        if os.path.isfile(os.getenv('VIRTIO_WIN')):
            mount_point = utils_v2v.v2v_mount(os.getenv('VIRTIO_WIN'),
                                              'rhv_tools_setup_iso',
                                              fstype='iso9660')
            export_path = params['tmp_mount_point'] = mount_point
        else:
            export_path = os.getenv('VIRTIO_WIN')

        qemu_guest_agent_dir = os.path.join(export_path, qa_path)
        all_pkgs = get_pkgs(qemu_guest_agent_dir)
        logging.debug('The installing qemu-guest-agent is: %s' % all_pkgs)
        vm_pkg_ver = get_pkg_version_vm()
        logging.debug('qemu-guest-agent version in vm: %s' % vm_pkg_ver)

        # Check the service status of qemu-guest-agent in VM
        status_ptn = r'Active: active \(running\)|qemu-ga \(pid +[0-9]+\) is running'
        cmd = 'service qemu-ga status;systemctl status qemu-guest-agent;systemctl status qemu-ga*'
        _, output = vmcheck.run_cmd(cmd)

        if not re.search(status_ptn, output):
            log_fail('qemu-guest-agent service exception')
Exemple #2
0
    def check_linux_ogac(vmcheck):
        """
        Check qemu-guest-agent service in VM

        :param vmcheck: VMCheck object for vm checking
        """
        def get_pkgs(pkg_path):
            """
            Get all qemu-guest-agent pkgs
            """
            pkgs = []
            for _, _, files in os.walk(pkg_path):
                for file_name in files:
                    pkgs.append(file_name)
            return pkgs

        def get_pkg_version_vm():
            """
            Get qemu-guest-agent version in VM
            """
            vender = vmcheck.get_vm_os_vendor()
            if vender in ['Ubuntu', 'Debian']:
                cmd = 'dpkg -l qemu-guest-agent'
            else:
                cmd = 'rpm -q qemu-guest-agent'
            _, output = vmcheck.run_cmd(cmd)

            pkg_ver_ptn = [
                r'qemu-guest-agent +[0-9]+:(.*?dfsg.*?) +',
                r'qemu-guest-agent-(.*?)\.x86_64'
            ]

            for ptn in pkg_ver_ptn:
                if re.search(ptn, output):
                    return re.search(ptn, output).group(1)
            return ''

        if os.path.isfile(os.getenv('VIRTIO_WIN')):
            mount_point = utils_v2v.v2v_mount(os.getenv('VIRTIO_WIN'),
                                              'rhv_tools_setup_iso',
                                              fstype='iso9660')
            export_path = params['tmp_mount_point'] = mount_point
        else:
            export_path = os.getenv('VIRTIO_WIN')

        qemu_guest_agent_dir = os.path.join(export_path, qa_path)
        all_pkgs = get_pkgs(qemu_guest_agent_dir)
        logging.debug('The installing qemu-guest-agent is: %s' % all_pkgs)
        vm_pkg_ver = get_pkg_version_vm()
        logging.debug('qemu-guest-agent verion in vm: %s' % vm_pkg_ver)

        # If qemu-guest-agent version in VM is higher than the pkg in qemu-guest-agent-iso,
        # v2v will not update the qemu-guest-agent version and report a warning.
        #
        # e.g.
        # virt-v2v: warning: failed to install QEMU Guest Agent: command:         package
        # qemu-guest-agent-10:2.12.0-3.el7.x86_64 (which is newer than
        # qemu-guest-agent-10:2.12.0-2.el7.x86_64) is already installed
        if not any([vm_pkg_ver in pkg for pkg in all_pkgs]):
            logging.debug(
                'Wrong qemu-guest-agent version, maybe it is higher than package version in ISO'
            )
            logging.info(
                'Unexpected qemu-guest-agent version, set v2v log checking')
            expect_msg_ptn = r'virt-v2v: warning: failed to install QEMU Guest Agent.*?is newer than.*? is already installed'
            params.update({'msg_content': expect_msg_ptn, 'expect_msg': 'yes'})

        # Check the service status of qemu-guest-agent in VM
        status_ptn = r'Active: active \(running\)|qemu-ga \(pid +[0-9]+\) is running'
        cmd = 'service qemu-ga status;systemctl status qemu-guest-agent'
        _, output = vmcheck.run_cmd(cmd)

        if not re.search(status_ptn, output):
            log_fail('qemu-guest-agent service exception')
    def check_genid(self):
        """
        Check genid value in vm xml match with given param.
        """
        def _compose_genid(vm_genid, vm_genidX):
            for index, val in enumerate(
                    map(lambda x: hex(int(x) & ((1 << 64) - 1)), [vm_genid, vm_genidX])):
                # Remove 'L' suffix for python2
                val = val.rstrip('L')
                # if length of val is not equal 18, we must fill the length
                # to 18 with 0.
                if len(val) < 18:
                    zero_pad = 18 - len(val)
                    val = '0x' + '0' * zero_pad + val[2:]
                if index == 0:
                    gen_id = '-'.join([val[n:] if n == -8 else val[n:n + 4]
                                       for n in range(-8, -17, -4)])
                elif index == 1:
                    temp_str = ''.join([val[i:i + 2]
                                        for i in range(0, len(val), 2)][:0:-1])
                    gen_idX = temp_str[:4] + '-' + temp_str[4:]
            return gen_id + '-' + gen_idX

        has_genid = self.params.get('has_genid')
        # Return if not set has_genid
        if not has_genid:
            return

        # Checking if the feature is supported
        if not compare_version(FEATURE_SUPPORT['genid']):
            reason = "Unsupported if v2v < %s" % FEATURE_SUPPORT['genid']
            logging.info('Skip Checking genid: %s' % reason)
            return

        supported_output = ['libvirt', 'local', 'qemu']
        # Skip checking if any of them is not in supported list
        if self.params.get('output_mode') not in supported_output:
            reason = 'output_mode is not in %s' % supported_output
            logging.info('Skip Checking genid: %s' % reason)
            return

        logging.info('Checking genid info in xml')
        logging.debug('vmxml is:\n%s' % self.vmxml)
        if has_genid == 'yes':
            mount_point = utils_v2v.v2v_mount(self.vmx_nfs_src, 'vmx_nfs_src')
            # For clean up
            self.mount_records[len(self.mount_records)] = (
                self.vmx_nfs_src, mount_point, None)

            cmd = "cat {}/{name}/{name}.vmx".format(
                mount_point, name=self.original_vm_name)
            cmd_result = process.run(cmd, timeout=20, ignore_status=True)
            cmd_result.stdout = cmd_result.stdout_text
            genid_pattern = r'vm.genid = "(-?\d+)"'
            genidX_pattern = r'vm.genidX = "(-?\d+)"'

            genid_list = [
                re.search(
                    i, cmd_result.stdout).group(1) if re.search(
                    i, cmd_result.stdout) else None for i in [
                    genid_pattern, genidX_pattern]]
            if not all(genid_list):
                logging.info(
                    'vm.genid or vm.genidX is missing:%s' %
                    genid_list)
                # genid will not be in vmxml
                if re.search(r'genid', self.vmxml):
                    self.log_err('Unexpected genid in xml')
                return

            genid_str = _compose_genid(*genid_list)
            logging.debug('genid string is %s' % genid_str)

            if not re.search(genid_str, self.vmxml):
                self.log_err('Not find genid or genid is incorrect')
        elif has_genid == 'no':
            if re.search(r'genid', self.vmxml):
                self.log_err('Unexpected genid in xml')