def get_guest_name_parser(options): cartesian_parser = cartesian_config.Parser() machines_cfg_path = data_dir.get_backend_cfg_path(options.type, "machines.cfg") guest_os_cfg_path = data_dir.get_backend_cfg_path(options.type, "guest-os.cfg") cartesian_parser.parse_file(machines_cfg_path) cartesian_parser.parse_file(guest_os_cfg_path) if options.arch: cartesian_parser.only_filter(options.arch) if options.machine_type: cartesian_parser.only_filter(options.machine_type) if options.guest_os: cartesian_parser.only_filter(options.guest_os) return cartesian_parser
def get_guest_name_parser(options): cartesian_parser = cartesian_config.Parser() machines_cfg_path = data_dir.get_backend_cfg_path(options.vt_type, 'machines.cfg') guest_os_cfg_path = data_dir.get_backend_cfg_path(options.vt_type, 'guest-os.cfg') cartesian_parser.parse_file(machines_cfg_path) cartesian_parser.parse_file(guest_os_cfg_path) if options.vt_arch: cartesian_parser.only_filter(options.vt_arch) if options.vt_machine_type: cartesian_parser.only_filter(options.vt_machine_type) if options.vt_guest_os: cartesian_parser.only_filter(options.vt_guest_os) return cartesian_parser
def get_guest_os_info(test_name, guest_os): """ Gets the correct asset and variant information depending on host OS, test name and guest OS. """ os_info = get_default_guest_os_info() cartesian_parser = cartesian_config.Parser() cartesian_parser.parse_file(data_dir.get_backend_cfg_path(test_name, 'guest-os.cfg')) cartesian_parser.only_filter(guest_os) for params in cartesian_parser.get_dicts(): image_name = params.get('image_name', 'image').split('/')[-1] os_info = {'asset': image_name, 'variant': guest_os} return os_info
def get_guest_os_info(test_name, guest_os): """ Gets the correct asset and variant information depending on host OS, test name and guest OS. """ os_info = get_default_guest_os_info() cartesian_parser = cartesian_config.Parser() cartesian_parser.parse_file( data_dir.get_backend_cfg_path(test_name, 'guest-os.cfg')) cartesian_parser.only_filter(guest_os) for params in cartesian_parser.get_dicts(): image_name = params.get('image_name', 'image').split('/')[-1] os_info = {'asset': image_name, 'variant': guest_os} return os_info
def get_guest_os_info_list(test_name, guest_os): """ Returns a list of matching assets compatible with the specified test name and guest OS """ os_info_list = [] cartesian_parser = cartesian_config.Parser() cartesian_parser.parse_file(data_dir.get_backend_cfg_path(test_name, 'guest-os.cfg')) cartesian_parser.only_filter(guest_os) dicts = cartesian_parser.get_dicts() for params in dicts: image_name = params.get('image_name', 'image').split('/')[-1] shortname = params.get('shortname', guest_os) os_info_list.append({'asset': image_name, 'variant': shortname}) if not os_info_list: logging.error("Could not find any assets compatible with %s for %s", guest_os, test_name) raise ValueError("Missing compatible assets for %s", guest_os) return os_info_list
def create_guest_os_cfg(t_type): root_dir = data_dir.get_root_dir() guest_os_cfg_dir = os.path.join(root_dir, 'shared', 'cfg', 'guest-os') guest_os_cfg_path = data_dir.get_backend_cfg_path(t_type, 'guest-os.cfg') guest_os_cfg_file = open(guest_os_cfg_path, 'w') get_directory_structure(guest_os_cfg_dir, guest_os_cfg_file)
def bootstrap(test_name, test_dir, base_dir, default_userspace_paths, check_modules, online_docs_url, restore_image=False, download_image=True, interactive=True, selinux=False, verbose=False, update_providers=False, guest_os=DEFAULT_GUEST_OS): """ Common virt test assistant module. :param test_name: Test name, such as "qemu". :param test_dir: Path with the test directory. :param base_dir: Base directory used to hold images and isos. :param default_userspace_paths: Important programs for a successful test execution. :param check_modules: Whether we want to verify if a given list of modules is loaded in the system. :param online_docs_url: URL to an online documentation system, such as a wiki page. :param restore_image: Whether to restore the image from the pristine. :param interactive: Whether to ask for confirmation. :param verbose: Verbose output. :param selinux: Whether setup SELinux contexts for shared/data. :param update_providers: Whether to update test providers if they are already downloaded. :param guest_os: Specify the guest image used for bootstrapping. By default the JeOS image is used. :raise error.CmdError: If JeOS image failed to uncompress :raise ValueError: If 7za was not found """ if interactive: logging_manager.configure_logging(utils_misc.VirtLoggingConfig(), verbose=verbose) logging.info("%s test config helper", test_name) step = 0 logging.info("") step += 1 logging.info("%d - Updating all test providers", step) asset.download_all_test_providers(update_providers) logging.info("") step += 1 logging.info("%d - Checking the mandatory programs and headers", step) verify_mandatory_programs(test_name) logging.info("") step += 1 logging.info("%d - Checking the recommended programs", step) verify_recommended_programs(test_name) logging.info("") step += 1 logging.info("%d - Verifying directories", step) shared_dir = os.path.dirname(data_dir.get_data_dir()) sub_dir_list = ["images", "isos", "steps_data", "gpg"] for sub_dir in sub_dir_list: sub_dir_path = os.path.join(base_dir, sub_dir) if not os.path.isdir(sub_dir_path): logging.debug("Creating %s", sub_dir_path) os.makedirs(sub_dir_path) else: logging.debug("Dir %s exists, not creating", sub_dir_path) datadir = data_dir.get_data_dir() if test_name == 'libvirt': create_config_files(test_dir, shared_dir, interactive, step) create_subtests_cfg(test_name) create_guest_os_cfg(test_name) # Don't bother checking if changes can't be made if os.getuid() == 0: verify_selinux(datadir, os.path.join(datadir, 'images'), os.path.join(datadir, 'isos'), data_dir.get_tmp_dir(), interactive, selinux) # lvsb test doesn't use any shared configs elif test_name == 'lvsb': create_subtests_cfg(test_name) if os.getuid() == 0: # Don't bother checking if changes can't be made verify_selinux(datadir, os.path.join(datadir, 'images'), os.path.join(datadir, 'isos'), data_dir.get_tmp_dir(), interactive, selinux) else: # Some other test create_config_files(test_dir, shared_dir, interactive, step) create_subtests_cfg(test_name) create_guest_os_cfg(test_name) cartesian_parser = cartesian_config.Parser() cartesian_parser.parse_file(data_dir.get_backend_cfg_path(test_name, 'guest-os.cfg')) cartesian_parser.only_filter(guest_os) image_name = 'jeos-19-64' for params in cartesian_parser.get_dicts(): image_name = params.get('image_name', 'image').split('/')[-1] if download_image or restore_image: logging.info("") step += 2 logging.info("%s - Verifying (and possibly downloading) guest image", step) os_info = get_guest_os_info(test_name, guest_os) os_asset = os_info['asset'] asset.download_asset(os_asset, interactive=interactive, restore_image=restore_image) if check_modules: logging.info("") step += 1 logging.info("%d - Checking for modules %s", step, ", ".join(check_modules)) for module in check_modules: if not utils.module_is_loaded(module): logging.warning("Module %s is not loaded. You might want to " "load it", module) else: logging.debug("Module %s loaded", module) if online_docs_url: logging.info("") step += 1 logging.info("%d - If you wish, take a look at the online docs for " "more info", step) logging.info("") logging.info(online_docs_url)
def bootstrap(test_name, test_dir, base_dir, default_userspace_paths, check_modules, online_docs_url, restore_image=False, download_image=True, interactive=True, selinux=False, verbose=False, update_providers=False, guest_os=DEFAULT_GUEST_OS): """ Common virt test assistant module. :param test_name: Test name, such as "qemu". :param test_dir: Path with the test directory. :param base_dir: Base directory used to hold images and isos. :param default_userspace_paths: Important programs for a successful test execution. :param check_modules: Whether we want to verify if a given list of modules is loaded in the system. :param online_docs_url: URL to an online documentation system, such as a wiki page. :param restore_image: Whether to restore the image from the pristine. :param interactive: Whether to ask for confirmation. :param verbose: Verbose output. :param selinux: Whether setup SELinux contexts for shared/data. :param update_providers: Whether to update test providers if they are already downloaded. :param guest_os: Specify the guest image used for bootstrapping. By default the JeOS image is used. :raise error.CmdError: If JeOS image failed to uncompress :raise ValueError: If 7za was not found """ if interactive: logging_manager.configure_logging(utils_misc.VirtLoggingConfig(), verbose=verbose) logging.info("%s test config helper", test_name) step = 0 logging.info("") step += 1 logging.info("%d - Updating all test providers", step) asset.download_all_test_providers(update_providers) logging.info("") step += 1 logging.info("%d - Checking the mandatory programs and headers", step) verify_mandatory_programs(test_name) logging.info("") step += 1 logging.info("%d - Checking the recommended programs", step) verify_recommended_programs(test_name) logging.info("") step += 1 logging.info("%d - Verifying directories", step) shared_dir = os.path.dirname(data_dir.get_data_dir()) sub_dir_list = ["images", "isos", "steps_data", "gpg"] for sub_dir in sub_dir_list: sub_dir_path = os.path.join(base_dir, sub_dir) if not os.path.isdir(sub_dir_path): logging.debug("Creating %s", sub_dir_path) os.makedirs(sub_dir_path) else: logging.debug("Dir %s exists, not creating", sub_dir_path) datadir = data_dir.get_data_dir() if test_name == 'libvirt': create_config_files(test_dir, shared_dir, interactive, step) create_subtests_cfg(test_name) create_guest_os_cfg(test_name) # Don't bother checking if changes can't be made if os.getuid() == 0: verify_selinux(datadir, os.path.join(datadir, 'images'), os.path.join(datadir, 'isos'), data_dir.get_tmp_dir(), interactive, selinux) # lvsb test doesn't use any shared configs elif test_name == 'lvsb': create_subtests_cfg(test_name) if os.getuid() == 0: # Don't bother checking if changes can't be made verify_selinux(datadir, os.path.join(datadir, 'images'), os.path.join(datadir, 'isos'), data_dir.get_tmp_dir(), interactive, selinux) else: # Some other test create_config_files(test_dir, shared_dir, interactive, step) create_subtests_cfg(test_name) create_guest_os_cfg(test_name) cartesian_parser = cartesian_config.Parser() cartesian_parser.parse_file( data_dir.get_backend_cfg_path(test_name, 'guest-os.cfg')) cartesian_parser.only_filter(guest_os) image_name = 'jeos-19-64' for params in cartesian_parser.get_dicts(): image_name = params.get('image_name', 'image').split('/')[-1] if download_image or restore_image: logging.info("") step += 2 logging.info("%s - Verifying (and possibly downloading) guest image", step) os_info = get_guest_os_info(test_name, guest_os) os_asset = os_info['asset'] asset.download_asset(os_asset, interactive=interactive, restore_image=restore_image) if check_modules: logging.info("") step += 1 logging.info("%d - Checking for modules %s", step, ", ".join(check_modules)) for module in check_modules: if not utils.module_is_loaded(module): logging.warning( "Module %s is not loaded. You might want to " "load it", module) else: logging.debug("Module %s loaded", module) if online_docs_url: logging.info("") step += 1 logging.info( "%d - If you wish, take a look at the online docs for " "more info", step) logging.info("") logging.info(online_docs_url)