def format_data_disk(self, tag): session = self.main_vm.wait_for_login() try: disk_id, disk_size = self._get_data_disk_info(tag, session) mnt = utils_disk.configure_empty_linux_disk( session, disk_id, disk_size)[0] self.disks_info[tag] = ["/dev/%s1" % disk_id, mnt] finally: session.close()
def format_data_disk(self, tag): session = self.main_vm.wait_for_login() try: info = backup_utils.get_disk_info_by_param(tag, self.params, session) if info is None: raise exceptions.TestFail("disk not found in guest ...") disk_path = "/dev/%s1" % info['kname'] mount_point = utils_disk.configure_empty_linux_disk( session, info['kname'], info['size'])[0] self.disks_info[tag] = [disk_path, mount_point] finally: session.close()
def format_data_disk(self, tag): session = self.main_vm.wait_for_login() try: disk_params = self.params.object_params(tag) disk_size = disk_params["image_size"] disks = utils_disk.get_linux_disks(session, True) for kname, attr in disks.items(): if attr[1] == disk_size and attr[2] == "disk": disk_id = kname break else: raise exceptions.TestFail("disk not found in guest ...") disk_path = "/dev/%s1" % kname mount_point = utils_disk.configure_empty_linux_disk( session, disk_id, disk_size)[0] self.disks_info[tag] = [disk_path, mount_point] finally: session.close()
def _get_mount_points(): """ Get data disk mount point(s) """ mount_points = [] os_type = params["os_type"] if os_type == "linux": mounts = session.cmd_output_safe('cat /proc/mounts | grep /dev/') for img in image_list: size = params["image_size_%s" % img] img_param = params["blk_extra_params_%s" % img].split('=')[1] drive_path = utils_misc.get_linux_drive_path( session, img_param) if not drive_path: test.error("Failed to get drive path of '%s'" % img) did = drive_path[5:] for mp in re.finditer(r'/dev/%s\d+\s+(\S+)\s+' % did, mounts): mount_points.append(mp.group(1)) else: mp = utils_disk.configure_empty_linux_disk( session, did, size) mount_points.extend(mp) elif os_type == "windows": size_record = [] for img in image_list: size = params["image_size_%s" % img] if size in size_record: continue size_record.append(size) disks = utils_disk.get_windows_disks_index(session, size) if not disks: test.fail("Fail to list image %s" % img) if not utils_disk.update_windows_disk_attributes( session, disks): test.fail("Failed to update windows disk attributes") for disk in disks: d_letter = utils_disk.configure_empty_windows_disk( session, disk, size) if not d_letter: test.fail("Fail to format disks") mount_points.extend(d_letter) else: test.cancel("Unsupported OS type '%s'" % os_type) return mount_points
def configure_data_disk(self): os_type = self.params["os_type"] disk_params = self.params.object_params(self.base_tag) disk_size = disk_params["image_size"] session = self.main_vm.wait_for_login() disk_id = self.get_linux_disk_path(session, disk_size) assert disk_id, "Disk not found in guest!" try: mount_point = utils_disk.configure_empty_linux_disk( session, disk_id, disk_size)[0] except ShellCmdError as e: disk_tag = r"/dev/%s" % disk_id error_msg = self.params['error_msg'] % disk_tag if not re.search(error_msg, str(e)): self.test.fail("Unexpected disk format error: %s" % str(e)) self.disks_info[self.base_tag] = [disk_tag, '/mnt'] else: self.test.fail("Read-only disk is formated") finally: session.close()
def configure_data_disk(self): os_type = self.params["os_type"] disk_params = self.params.object_params(self.snapshot_tag) disk_size = disk_params["image_size"] session = self.main_vm.wait_for_login() try: if os_type != "windows": disk_id = self.get_linux_disk_path(session, disk_size) assert disk_id, "Disk not found in guest!" mount_point = utils_disk.configure_empty_linux_disk( session, disk_id, disk_size)[0] self.disks_info.append([r"/dev/%s1" % disk_id, mount_point]) else: disk_id = utils_disk.get_windows_disks_index( session, disk_size) driver_letter = utils_disk.configure_empty_windows_disk( session, disk_id, disk_size)[0] mount_point = r"%s:\\" % driver_letter self.disks_info.append([disk_id, mount_point]) finally: session.close()
def run(test, params, env): """ 1) Start guest with both data disk and system disk. 2) Format a data disk(ext4 for rhel6+ and xfs for rhel7+) :param test: QEMU test object :param params: Dictionary with the test parameters :param env: Dictionary with test environment. """ session = None vm = env.get_vm(params["main_vm"]) vm.verify_alive() session = vm.wait_for_login(timeout=int(params.get("login_timeout", 240))) stg_tag = params["images"].split()[-1] stg_params = params.object_params(stg_tag) stg_fstype = stg_params["disk_format"] stg_size = stg_params["image_size"] stg_extra_params = stg_params.get("blk_extra_params", "") match = re.search(r"(serial|wwn)=(\w+)", stg_extra_params, re.M) try: drive_id = match.group(2) drive_path = utils_misc.get_linux_drive_path(session, drive_id) did = drive_path[5:] logging.info("Format %s(size=%s) with %s type." % (did, stg_size, stg_fstype)) mnts = utils_disk.configure_empty_linux_disk(session, did, stg_size, fstype=stg_fstype) if not mnts: test.fail("Failed to create %s on disk %s." % (stg_fstype, did)) finally: if session: session.close() vm.destroy()
def run(test, params, env): """ Run IOzone for linux on a linux guest: 1) Log into a guest. 2) Execute the IOzone test. :param test: kvm test object :param params: Dictionary with the test parameters :param env: Dictionary with test environment. """ def _get_data_disks(): """ Get the data disks by serial or wwn options. """ disks = {} for data_image in params["images"].split()[1:]: extra_params = params.get("blk_extra_params_%s" % data_image, '') match = re.search(r"(serial|wwn)=(\w+)", extra_params, re.M) if match: drive_id = match.group(2) else: continue drive_path = utils_misc.get_linux_drive_path(session, drive_id) if not drive_path: test.error("Failed to get '%s' drive path" % data_image) disks[drive_path[5:]] = data_image return disks def _get_mounted_points(): """ Get the mounted points. """ points = [] for id in re.finditer(r'(%s\d+)' % did, ' '.join(disks)): s = re.search(r'/dev/%s\s+(\S+)\s+' % id.group(1), mount_info, re.M) if s: points.append(s.group(1)) return points def _wait_for_procs_done(timeout=1800): """ Wait all the processes are done. """ if not utils_misc.wait_for( lambda: 'iozone' not in session.cmd_output('pgrep -xl iozone'), timeout, step=3.0): test.error('Not all iozone processes done in %s sec.' % timeout) iozone_test_dir = params.get('iozone_test_dir', '/home') iozone_cmd_options = params['iozone_cmd_options'] iozone_timeout = float(params.get("iozone_timeout", 1800)) n_partitions = params.get('partitions_num', 1) fstype = params.get('fstype', 'xfs') labeltype = params.get('labeltype', utils_disk.PARTITION_TABLE_TYPE_GPT) vm = env.get_vm(params["main_vm"]) vm.verify_alive() session = vm.wait_for_login(timeout=float(params.get("login_timeout", 360))) _wait_for_procs_done() error_context.context("Running IOzone command on guest.") try: iozone = generate_instance(params, session, 'iozone') dids = _get_data_disks() if dids: mount_info = session.cmd_output_safe('cat /proc/mounts | grep \'/dev/\'') disks = utils_disk.get_linux_disks(session, True) for did, image_name in dids.items(): size = params.get('image_size_%s' % image_name) start = params.get('image_start_%s' % image_name, "0M") mounted_points = _get_mounted_points() if not mounted_points: mounted_points = utils_disk.configure_empty_linux_disk( session, did, size, start, n_partitions, fstype, labeltype) for mounted_point in mounted_points: iozone.run(iozone_cmd_options % mounted_point, iozone_timeout) utils_disk.clean_partition_linux(session, did) else: iozone.run(iozone_cmd_options % iozone_test_dir, iozone_timeout) finally: iozone.clean() session.close()
def run(test, params, env): """ Run IOzone for linux on a linux guest: 1) Log into a guest. 2) Execute the IOzone test. :param test: kvm test object :param params: Dictionary with the test parameters :param env: Dictionary with test environment. """ def _get_data_disks(): """ Get the data disks by serial or wwn options. """ disks = {} for data_image in params["images"].split()[1:]: extra_params = params.get("blk_extra_params_%s" % data_image, '') match = re.search(r"(serial|wwn)=(\w+)", extra_params, re.M) if match: drive_id = match.group(2) else: continue drive_path = utils_misc.get_linux_drive_path(session, drive_id) if not drive_path: test.error("Failed to get '%s' drive path" % data_image) disks[drive_path[5:]] = data_image return disks def _get_mounted_points(): """ Get the mounted points. """ points = [] for id in re.finditer(r'(%s\d+)' % did, ' '.join(disks)): s = re.search(r'/dev/%s\s+(\S+)\s+' % id.group(1), mount_info, re.M) if s: points.append(s.group(1)) return points def _wait_for_procs_done(timeout=1800): """ Wait all the processes are done. """ if not utils_misc.wait_for( lambda: 'iozone' not in session.cmd_output('pgrep -xl iozone'), timeout, step=3.0): test.error('Not all iozone processes done in %s sec.' % timeout) iozone_test_dir = params.get('iozone_test_dir', '/home') iozone_cmd_options = params['iozone_cmd_options'] iozone_timeout = float(params.get("iozone_timeout", 1800)) n_partitions = params.get('partitions_num', 1) fstype = params.get('fstype', 'xfs') labeltype = params.get('labeltype', utils_disk.PARTITION_TABLE_TYPE_GPT) vm = env.get_vm(params["main_vm"]) vm.verify_alive() session = vm.wait_for_login( timeout=float(params.get("login_timeout", 360))) _wait_for_procs_done() error_context.context("Running IOzone command on guest.") iozone = generate_instance(params, vm, 'iozone') try: dids = _get_data_disks() if dids: mount_info = session.cmd_output_safe( 'cat /proc/mounts | grep \'/dev/\'') disks = utils_disk.get_linux_disks(session, True) for did, image_name in dids.items(): size = params.get('image_size_%s' % image_name) start = params.get('image_start_%s' % image_name, "0M") mounted_points = _get_mounted_points() if not mounted_points: mounted_points = utils_disk.configure_empty_linux_disk( session, did, size, start, n_partitions, fstype, labeltype) for mounted_point in mounted_points: iozone.run(iozone_cmd_options % mounted_point, iozone_timeout) utils_disk.clean_partition_linux(session, did) else: iozone.run(iozone_cmd_options % iozone_test_dir, iozone_timeout) finally: if params.get('sub_test_shutdown_vm', 'no') == 'no': iozone.clean() session.close()