def check_vol(vol_params): """ Check volume information. """ pv = libvirt_storage.PoolVolume(pool_name) # Supported operation if vol_name not in pv.list_volumes(): test.fail("Volume %s doesn't exist" % vol_name) ret = virsh.vol_dumpxml(vol_name, pool_name) libvirt.check_exit_status(ret) # vol-info if not pv.volume_info(vol_name): test.fail("Can't see volume info") # vol-key ret = virsh.vol_key(vol_name, pool_name) libvirt.check_exit_status(ret) if "%s/%s" % (disk_src_pool, vol_name) not in ret.stdout: test.fail("Volume key isn't correct") # vol-path ret = virsh.vol_path(vol_name, pool_name) libvirt.check_exit_status(ret) if "%s/%s" % (disk_src_pool, vol_name) not in ret.stdout: test.fail("Volume path isn't correct") # vol-pool ret = virsh.vol_pool("%s/%s" % (disk_src_pool, vol_name)) libvirt.check_exit_status(ret) if pool_name not in ret.stdout: test.fail("Volume pool isn't correct") # vol-name ret = virsh.vol_name("%s/%s" % (disk_src_pool, vol_name)) libvirt.check_exit_status(ret) if vol_name not in ret.stdout: test.fail("Volume name isn't correct") # vol-resize ret = virsh.vol_resize(vol_name, "2G", pool_name) libvirt.check_exit_status(ret) # Not supported operation # vol-clone ret = virsh.vol_clone(vol_name, cloned_vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-create-from volxml = vol_xml.VolXML() vol_params.update({"name": "%s" % create_from_cloned_volume}) v_xml = volxml.new_vol(**vol_params) v_xml.xmltreefile.write() ret = virsh.vol_create_from(pool_name, v_xml.xml, vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-wipe ret = virsh.vol_wipe(vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-upload ret = virsh.vol_upload(vol_name, vm.get_first_disk_devices()['source'], "--pool %s" % pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-download ret = virsh.vol_download(vol_name, cloned_vol_name, "--pool %s" % pool_name) libvirt.check_result(ret, skip_if=unsupported_err)
def check_vol(vol_params): """ Check volume information. """ pv = libvirt_storage.PoolVolume(pool_name) # Supported operation if vol_name not in pv.list_volumes(): test.fail("Volume %s doesn't exist" % vol_name) ret = virsh.vol_dumpxml(vol_name, pool_name) libvirt.check_exit_status(ret) # vol-info if not pv.volume_info(vol_name): test.fail("Can't see volume info") # vol-key ret = virsh.vol_key(vol_name, pool_name) libvirt.check_exit_status(ret) if "%s/%s" % (disk_src_pool, vol_name) not in ret.stdout.strip(): test.fail("Volume key isn't correct") # vol-path ret = virsh.vol_path(vol_name, pool_name) libvirt.check_exit_status(ret) if "%s/%s" % (disk_src_pool, vol_name) not in ret.stdout.strip(): test.fail("Volume path isn't correct") # vol-pool ret = virsh.vol_pool("%s/%s" % (disk_src_pool, vol_name)) libvirt.check_exit_status(ret) if pool_name not in ret.stdout.strip(): test.fail("Volume pool isn't correct") # vol-name ret = virsh.vol_name("%s/%s" % (disk_src_pool, vol_name)) libvirt.check_exit_status(ret) if vol_name not in ret.stdout.strip(): test.fail("Volume name isn't correct") # vol-resize ret = virsh.vol_resize(vol_name, "2G", pool_name) libvirt.check_exit_status(ret) # Not supported operation # vol-clone ret = virsh.vol_clone(vol_name, cloned_vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-create-from volxml = vol_xml.VolXML() vol_params.update({"name": "%s" % create_from_cloned_volume}) v_xml = volxml.new_vol(**vol_params) v_xml.xmltreefile.write() ret = virsh.vol_create_from(pool_name, v_xml.xml, vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-wipe ret = virsh.vol_wipe(vol_name, pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-upload ret = virsh.vol_upload(vol_name, vm.get_first_disk_devices()['source'], "--pool %s" % pool_name) libvirt.check_result(ret, skip_if=unsupported_err) # vol-download ret = virsh.vol_download(vol_name, cloned_vol_name, "--pool %s" % pool_name) libvirt.check_result(ret, skip_if=unsupported_err)
def run(test, params, env): """ Test command: virsh vol-resize Resize the capacity of the given volume (default bytes). 1. Define and start a given type pool. 2. Create a volume in the pool. 3. Do vol-resize. 4. Check the volume info. 5. Delete the volume and pool. TODO: Add volume shrink test after libvirt uptream support it. """ pool_name = params.get("pool_name") pool_type = params.get("pool_type") pool_target = params.get("pool_target") emulated_image = params.get("emulated_image") emulated_image_size = params.get("emulated_image_size") vol_name = params.get("vol_name") vol_format = params.get("vol_format") vol_capacity = params.get("vol_capacity") vol_new_capacity = params.get("vol_new_capacity") resize_option = params.get("resize_option", "") check_vol_size = "yes" == params.get("check_vol_size", "yes") status_error = "yes" == params.get("status_error", "no") if not libvirt_version.version_compare(1, 0, 0): if "--allocate" in resize_option: raise error.TestNAError("'--allocate' flag is not supported in" " current libvirt version.") # libvirt acl polkit related params uri = params.get("virsh_uri") unpri_user = params.get('unprivileged_user') if unpri_user: if unpri_user.count('EXAMPLE'): unpri_user = '******' if not libvirt_version.version_compare(1, 1, 1): if params.get('setup_libvirt_polkit') == 'yes': raise error.TestNAError("API acl test not supported in current" " libvirt version.") libv_pvt = libvirt.PoolVolumeTest(test, params) try: libv_pool = libvirt_storage.StoragePool() # Raise error if given name pool already exist if libv_pool.pool_exists(pool_name): raise error.TestError("Pool '%s' already exist", pool_name) else: # Create a new pool libv_pvt.pre_pool(pool_name, pool_type, pool_target, emulated_image, image_size=emulated_image_size) pool_info = libv_pool.pool_info(pool_name) for key in pool_info: logging.debug("Pool info: %s = %s", key, pool_info[key]) # Deal with vol_new_capacity, '--capacity' only accpet integer if vol_new_capacity == "pool_available": pool_avai = pool_info["Available"].split() vol_new_capacity = pool_avai[0].split('.')[0] + pool_avai[1] if vol_new_capacity == "pool_capacity": pool_capa = pool_info["Capacity"].split() vol_new_capacity = pool_capa[0].split('.')[0] + pool_capa[1] # Create a volume libv_pvt.pre_vol(vol_name=vol_name, vol_format=vol_format, capacity=vol_capacity, allocation=None, pool_name=pool_name) libv_vol = libvirt_storage.PoolVolume(pool_name) check_vol_info(libv_vol, vol_name) # The volume size may not accurate as we expect after resize, such as: # 1) vol_new_capacity = 1b with --delta option, the volume size will not # change; run # 2) vol_new_capacity = 1KB with --delta option, the volume size will # increase 1024 not 1000 # So we can disable volume size check after resize if check_vol_size: vol_path = libv_vol.list_volumes()[vol_name] expect_info = get_expect_info(vol_new_capacity, vol_path, resize_option) logging.debug("Expect volume info: %s", expect_info) else: expect_info = {} # Run vol-resize result = virsh.vol_resize(vol_name, vol_new_capacity, pool_name, resize_option, uri=uri, unprivileged_user=unpri_user, debug=True) if not status_error: if result.exit_status != 0: raise error.TestFail(result.stdout.strip()) else: #if check_vol_info(libv_vol, vol_name, expect_info): logging.debug("Volume %s resize check pass.", vol_name) #else: # raise error.TestFail("Volume %s resize check fail." % # vol_name) elif result.exit_status == 0: raise error.TestFail("Expect resize fail but run successfully.") finally: # Clean up try: libv_pvt.cleanup_pool(pool_name, pool_type, pool_target, emulated_image) except error.TestFail, detail: logging.error(str(detail))
def run(test, params, env): """ Test command: virsh vol-resize Resize the capacity of the given volume (default bytes). 1. Define and start a given type pool. 2. Create a volume in the pool. 3. Do vol-resize. 4. Check the volume info. 5. Delete the volume and pool. TODO: Add volume shrink test after libvirt uptream support it. """ pool_name = params.get("pool_name") pool_type = params.get("pool_type") pool_target = params.get("pool_target") emulated_image = params.get("emulated_image") emulated_image_size = params.get("emulated_image_size") vol_name = params.get("vol_name") vol_format = params.get("vol_format") vol_capacity = params.get("vol_capacity") vol_new_capacity = params.get("vol_new_capacity") resize_option = params.get("resize_option", "") check_vol_size = "yes" == params.get("check_vol_size", "yes") status_error = "yes" == params.get("status_error", "no") # libvirt acl polkit related params uri = params.get("virsh_uri") unpri_user = params.get('unprivileged_user') if unpri_user: if unpri_user.count('EXAMPLE'): unpri_user = '******' if not libvirt_version.version_compare(1, 1, 1): if params.get('setup_libvirt_polkit') == 'yes': raise error.TestNAError("API acl test not supported in current" + " libvirt version.") libv_pvt = libvirt.PoolVolumeTest(test, params) try: libv_pool = libvirt_storage.StoragePool() pool_rename_times = 0 # Rename pool if given name pool exist, the max rename times is 5 while libv_pool.pool_exists(pool_name) and pool_rename_times < 5: logging.debug("Pool '%s' already exist.", pool_name) pool_name = pool_name + "_t" logging.debug("Using a new name '%s' to define pool.", pool_name) pool_rename_times += 1 else: # Create a new pool libv_pvt.pre_pool(pool_name, pool_type, pool_target, emulated_image, emulated_image_size) pool_info = libv_pool.pool_info(pool_name) for key in pool_info: logging.debug("Pool info: %s = %s", key, pool_info[key]) # Deal with vol_new_capacity, '--capacity' only accpet integer if vol_new_capacity == "pool_available": pool_avai = pool_info["Available"].split() vol_new_capacity = pool_avai[0].split('.')[0] + pool_avai[1] if vol_new_capacity == "pool_capacity": pool_capa = pool_info["Capacity"].split() vol_new_capacity = pool_capa[0].split('.')[0] + pool_capa[1] # Create a volume libv_pvt.pre_vol(vol_name=vol_name, vol_format=vol_format, capacity=vol_capacity, allocation=None, pool_name=pool_name) libv_vol = libvirt_storage.PoolVolume(pool_name) check_vol_info(libv_vol, vol_name) # The volume size may not accurate as we expect after resize, such as: # 1) vol_new_capacity = 1b with --delta option, the volume size will not # change; run # 2) vol_new_capacity = 1KB with --delta option, the volume size will # increase 1024 not 1000 # So we can disable volume size check after resize if check_vol_size: vol_path = libv_vol.list_volumes()[vol_name] expect_info = get_expect_info(vol_new_capacity, vol_path, resize_option) logging.debug("Expect volume info: %s", expect_info) else: expect_info = {} # Run vol-resize result = virsh.vol_resize(vol_name, vol_new_capacity, pool_name, resize_option, uri=uri, unprivileged_user=unpri_user, debug=True) if not status_error: if result.exit_status != 0: raise error.TestFail(result.stdout.strip()) else: if check_vol_info(libv_vol, vol_name, expect_info): logging.debug("Volume %s resize check pass.", vol_name) else: raise error.TestFail("Volume %s resize check fail." % vol_name) elif result.exit_status == 0: raise error.TestFail("Expect resize fail but run successfully.") finally: # Clean up try: libv_pvt.cleanup_pool(pool_name, pool_type, pool_target, emulated_image) except error.TestFail, detail: logging.error(str(detail))
def run(test, params, env): """ Test command: virsh vol-resize Resize the capacity of the given volume (default bytes). 1. Define and start a given type pool. 2. Create a volume in the pool. 3. Do vol-resize. 4. Check the volume info. 5. Delete the volume and pool. TODO: Add volume shrink test after libvirt uptream support it. """ pool_name = params.get("pool_name") pool_type = params.get("pool_type") pool_target = params.get("pool_target") emulated_image = params.get("emulated_image") emulated_image_size = params.get("emulated_image_size") vol_name = params.get("vol_name") vol_format = params.get("vol_format") vol_capacity = params.get("vol_capacity") vol_new_capacity = params.get("vol_new_capacity") resize_option = params.get("resize_option", "") check_vol_size = "yes" == params.get("check_vol_size", "yes") status_error = "yes" == params.get("status_error", "no") b_luks_encrypt = "luks" == params.get("encryption_method") encryption_password = params.get("encryption_password", "redhat") secret_uuids = [] if not libvirt_version.version_compare(1, 0, 0): if "--allocate" in resize_option: test.cancel("'--allocate' flag is not supported in" " current libvirt version.") # libvirt acl polkit related params uri = params.get("virsh_uri") unpri_user = params.get('unprivileged_user') if unpri_user: if unpri_user.count('EXAMPLE'): unpri_user = '******' if not libvirt_version.version_compare(1, 1, 1): if params.get('setup_libvirt_polkit') == 'yes': test.cancel("API acl test not supported in current" " libvirt version.") libv_pvt = libvirt.PoolVolumeTest(test, params) try: libv_pool = libvirt_storage.StoragePool() # Raise error if given name pool already exist if libv_pool.pool_exists(pool_name): test.error("Pool '%s' already exist", pool_name) else: # Create a new pool libv_pvt.pre_pool(pool_name, pool_type, pool_target, emulated_image, image_size=emulated_image_size) pool_info = libv_pool.pool_info(pool_name) for key in pool_info: logging.debug("Pool info: %s = %s", key, pool_info[key]) # Deal with vol_new_capacity, '--capacity' only accpet integer if vol_new_capacity == "pool_available": pool_avai = pool_info["Available"].split() vol_new_capacity = pool_avai[0].split('.')[0] + pool_avai[1] if vol_new_capacity == "pool_capacity": pool_capa = pool_info["Capacity"].split() vol_new_capacity = pool_capa[0].split('.')[0] + pool_capa[1] # Create a volume if b_luks_encrypt: luks_sec_uuid = create_luks_secret( os.path.join(pool_target, vol_name), test) secret_uuids.append(luks_sec_uuid) set_secret_value(encryption_password, luks_sec_uuid) create_luks_vol(vol_name, luks_sec_uuid, params, test) else: libv_pvt.pre_vol(vol_name=vol_name, vol_format=vol_format, capacity=vol_capacity, allocation=None, pool_name=pool_name) libv_vol = libvirt_storage.PoolVolume(pool_name) check_vol_info(libv_vol, vol_name, test) # The volume size may not accurate as we expect after resize, such as: # 1) vol_new_capacity = 1b with --delta option, the volume size will not # change; run # 2) vol_new_capacity = 1KB with --delta option, the volume size will # increase 1024 not 1000 # So we can disable volume size check after resize if check_vol_size: vol_path = libv_vol.list_volumes()[vol_name] expect_info = get_expect_info(vol_new_capacity, vol_path, test, resize_option) logging.debug("Expect volume info: %s", expect_info) else: expect_info = {} # Run vol-resize result = virsh.vol_resize(vol_name, vol_new_capacity, pool_name, resize_option, uri=uri, unprivileged_user=unpri_user, debug=True) if not status_error: if result.exit_status != 0: test.fail(result.stdout.strip() + result.stderr.strip()) else: if check_vol_info(libv_vol, vol_name, test, expect_info): logging.debug("Volume %s resize check pass.", vol_name) else: test.fail("Volume %s resize check fail." % vol_name) elif result.exit_status == 0: test.fail("Expect resize fail but run successfully.") finally: # Clean up try: libv_pvt.cleanup_pool(pool_name, pool_type, pool_target, emulated_image) for secret_uuid in set(secret_uuids): virsh.secret_undefine(secret_uuid) except exceptions.TestFail as detail: logging.error(str(detail))
def run(test, params, env): """ Test command: virsh vol-resize Resize the capacity of the given volume (default bytes). 1. Define and start a given type pool. 2. Create a volume in the pool. 3. Do vol-resize. 4. Check the volume info. 5. Delete the volume and pool. TODO: Add volume shrink test after libvirt uptream support it. """ pool_name = params.get("pool_name") pool_type = params.get("pool_type") pool_target = params.get("pool_target") emulated_image = params.get("emulated_image") emulated_image_size = params.get("emulated_image_size") vol_name = params.get("vol_name") vol_format = params.get("vol_format") vol_capacity = params.get("vol_capacity") vol_new_capacity = params.get("vol_new_capacity") resize_option = params.get("resize_option", "") check_vol_size = "yes" == params.get("check_vol_size", "yes") status_error = "yes" == params.get("status_error", "no") libv_pvt = libvirt.PoolVolumeTest(test, params) try: libv_pool = libvirt_storage.StoragePool() pool_rename_times = 0 # Rename pool if given name pool exist, the max rename times is 5 while libv_pool.pool_exists(pool_name) and pool_rename_times < 5: logging.debug("Pool '%s' already exist.", pool_name) pool_name = pool_name + "_t" logging.debug("Using a new name '%s' to define pool.", pool_name) pool_rename_times += 1 else: # Create a new pool libv_pvt.pre_pool(pool_name, pool_type, pool_target, emulated_image, emulated_image_size) pool_info = libv_pool.pool_info(pool_name) for key in pool_info: logging.debug("Pool info: %s = %s", key, pool_info[key]) # Deal with vol_new_capacity, '--capacity' only accpet integer if vol_new_capacity == "pool_available": pool_avai = pool_info["Available"].split() vol_new_capacity = pool_avai[0].split('.')[0] + pool_avai[1] if vol_new_capacity == "pool_capacity": pool_capa = pool_info["Capacity"].split() vol_new_capacity = pool_capa[0].split('.')[0] + pool_capa[1] # Create a volume libv_pvt.pre_vol(vol_name=vol_name, vol_format=vol_format, capacity=vol_capacity, allocation=None, pool_name=pool_name) libv_vol = libvirt_storage.PoolVolume(pool_name) check_vol_info(libv_vol, vol_name) # The volume size may not accurate as we expect after resize, such as: # 1) vol_new_capacity = 1b with --delta option, the volume size will not # change; run # 2) vol_new_capacity = 1KB with --delta option, the volume size will # increase 1024 not 1000 # So we can disable volume size check after resize if check_vol_size: vol_path = libv_vol.list_volumes()[vol_name] expect_info = get_expect_info(vol_new_capacity, vol_path, resize_option) logging.debug("Expect volume info: %s", expect_info) else: expect_info = {} # Run vol-resize result = virsh.vol_resize(vol_name, vol_new_capacity, pool_name, resize_option, debug=True) if not status_error: if result.exit_status != 0: raise error.TestFail(result.stdout.strip()) else: if check_vol_info(libv_vol, vol_name, expect_info): logging.debug("Volume %s resize check pass.", vol_name) else: raise error.TestFail("Volume %s resize check fail." % vol_name) elif result.exit_status == 0: raise error.TestFail("Expect resize fail but run successfully.") finally: # Clean up try: libv_pvt.cleanup_pool(pool_name, pool_type, pool_target, emulated_image) except error.TestFail, detail: logging.error(str(detail))