def test_basic_workflow(self): """ Check the basic workflow works using ramdisk """ ramdisk_filename = vg_ramdisk_dir = loop_device = None vg_name = "avocado_testing_vg_e5kj3erv11a" lv_name = "avocado_testing_lv_lk0ff33al5h" ramdisk_basedir = os.path.join(self.tmpdir, "foo", "bar") mount_loc = os.path.join(self.tmpdir, "lv_mount_location") os.mkdir(mount_loc) try: # Create ramdisk vg self.assertFalse(os.path.exists(ramdisk_basedir)) self.assertFalse(lv_utils.vg_check(vg_name)) spec = lv_utils.vg_ramdisk(False, vg_name, 10, ramdisk_basedir, "sparse_file") ramdisk_filename, vg_ramdisk_dir, vg_name, loop_device = spec # Check it was created properly self.assertTrue(ramdisk_filename) self.assertTrue(vg_ramdisk_dir) self.assertTrue(vg_name) self.assertTrue(loop_device) self.assertTrue(os.path.exists(ramdisk_basedir)) self.assertTrue(glob.glob(os.path.join(ramdisk_basedir, "*"))) self.assertTrue(lv_utils.vg_check(vg_name)) vgs = lv_utils.vg_list() self.assertIn(vg_name, vgs) # Can't create existing vg self.assertRaises(lv_utils.LVException, lv_utils.vg_create, vg_name, loop_device) # Create and check LV lv_utils.lv_create(vg_name, lv_name, 1) lv_utils.lv_check(vg_name, lv_name) self.assertIn(vg_name, process.run("lvs --all", sudo=True).stdout_text) self.assertIn(lv_name, lv_utils.lv_list()) lv_utils.lv_mount(vg_name, lv_name, mount_loc, "ext2") lv_utils.lv_umount(vg_name, lv_name) lv_utils.lv_remove(vg_name, lv_name) self.assertNotIn(lv_name, lv_utils.lv_list()) # Cleanup ramdisk vgs lv_utils.vg_ramdisk_cleanup(ramdisk_filename, vg_ramdisk_dir, vg_name, loop_device) self.assertTrue(os.path.exists(ramdisk_basedir)) self.assertFalse(glob.glob(os.path.join(ramdisk_basedir, "*"))) except BaseException as details: try: process.run("mountpoint %s && umount %s" % (mount_loc, mount_loc), shell=True, sudo=True) except BaseException as details: print("Fail to unmount LV: %s" % details) try: lv_utils.lv_remove(vg_name, lv_name) except BaseException as details: print("Fail to cleanup LV: %s" % details) try: lv_utils.vg_ramdisk_cleanup(ramdisk_filename, vg_ramdisk_dir, vg_name, loop_device) except BaseException as details: print("Fail to cleanup vg_ramdisk: %s" % details)
def show(cls, params, object=None): """ Return a list of available states of a specific type. All arguments match the base class. """ return lv_utils.lv_list(params["vg_name"])
def volumes_capacity(lv_name): """ Get volume's information about its capacity percentage. """ volumes = lv_utils.lv_list() if lv_name in list(volumes.keys()): return volumes[lv_name]["Origin_Data"] return None
def show_states(run_params, env): """ Return a list of available states of a specific type. :param run_params: configuration parameters :type run_params: {str, str} :param env: test environment :type env: Env object """ states = [] for vm_name in run_params.objects("vms"): vm_params = run_params.object_params(vm_name) vm = env.get_vm(vm_name) if vm_params.get("check_type", "offline") == "offline": logging.debug("Checking %s for available offline states", vm_name) states = lv_utils.lv_list(vm_params["vg_name"]) logging.info("Detected offline states for %s: %s", vm_name, ", ".join(states)) else: if vm_params["check_type"] == "ramfile": state_dir = vm_params.get("image_name", "") state_dir = os.path.dirname(state_dir) state_path = os.path.join(state_dir, "*.state") states = glob.glob(state_path) logging.info("Detected ramfile snapshots for %s: %s", vm_name, ", ".join(states)) else: vm_image = "%s.%s" % (vm_params["image_name"], vm_params.get("image_format", "qcow2")) qemu_img = vm_params.get("qemu_img_binary", "/usr/bin/qemu-img") online_snapshots_dump = process.system_output("%s snapshot -l %s -U" % (qemu_img, vm_image)).decode() state_tuples = re.findall("\d+\s+([\w\.]+)\s+([\w\.]+)\s+\d{4}-\d\d-\d\d", online_snapshots_dump) for state_tuple in state_tuples: logging.info("Detected online state '%s' of size %s", state_tuple[0], state_tuple[1]) states.append(state_tuple[0]) return states