def add_host_image_to_dest(prefix_path, dest): ''' Creates a symlink to the host's base image in dest. Args: prefix_path (str): Path to the prefix dest (str): Where to create the symlink ''' prefix = sdk.load_env(prefix_path) environ['LAGO_PREFIX_PATH'] = path.join(prefix_path, 'current') disk_path = _get_host(prefix).disks[0]['path'] backing_file_path = get_qemu_info(disk_path).get('backing-filename') if not backing_file_path: raise RuntimeError( 'Failed to add image {} to {}'.format(disk_path, dest) ) if path.isdir(dest): dest = path.join(dest, path.basename(backing_file_path)) dirname = path.dirname(dest) makedirs(dirname) symlink(backing_file_path, dest)
def main(): if len(sys.argv) != 3: usage() sys.exit(1) prefix = sdk.load_env(sys.argv[1]) subnet = find_ipv6_subnet(prefix, network_name=sys.argv[2]) set_subnet_env_var_for_vms(prefix, subnet) print(subnet)
def main(): if len(sys.argv) != 3: usage() sys.exit(1) prefix = sdk.load_env(sys.argv[1]) subnet = find_ipv6_subnet(prefix, network_name=sys.argv[2]) set_subnet_env_var_for_vms(prefix, subnet) print(subnet)
def test_init_logger_loaded_env(self, tmpdir, monkeypatch, mock_workdir, empty_prefix, level): log_path = tmpdir.mkdir('logs').join('test.log') monkeypatch.setattr('lago.workdir.Workdir.get_prefix', lambda *args, **kwargs: empty_prefix) sdk.load_env(workdir=str(tmpdir), logfile=str(log_path), loglevel=level) handlers = [ h for h in logging.root.handlers if isinstance(h, logging.FileHandler) ] assert len(handlers) == 1 handler = handlers.pop() assert handler.stream.name == str(log_path) assert handler.level == getattr(logging, level) logging.root.removeHandler(handler)
def generate_coverage_report(prefix_path, output_path): os.makedirs(output_path, exist_ok=True) prefix = sdk.load_env(prefix_path) hosts = [h for h in six.itervalues(prefix.get_vms()) if h.vm_type == 'ovirt-host'] _stop_vdsm_services(hosts) _combine_coverage_data_on_hosts(hosts) _copy_coverage_data_to_first_host(hosts[0], hosts[1:]) _generate_coverage_report_on_host(hosts[0]) _copy_coverage_report_from_host(hosts[0], output_path)
def test_init_logger_loaded_env( self, tmpdir, monkeypatch, mock_workdir, empty_prefix, level ): log_path = tmpdir.mkdir('logs').join('test.log') monkeypatch.setattr( 'lago.workdir.Workdir.get_prefix', lambda *args, **kwargs: empty_prefix ) sdk.load_env( workdir=str(tmpdir), logfile=str(log_path), loglevel=level ) handlers = [ h for h in logging.root.handlers if isinstance(h, logging.FileHandler) ] assert len(handlers) == 1 handler = handlers.pop() assert handler.stream.name == str(log_path) assert handler.level == getattr(logging, level) logging.root.removeHandler(handler)
def test_load_env_up(env, vms, tmp_workdir): workdir = os.path.join(str(tmp_workdir), 'lago') logfile = os.path.join(str(tmp_workdir), 'lago-test_load_env_up.log') loaded_env = sdk.load_env(workdir, logfile=logfile) assert loaded_env is not env assert loaded_env._prefix is not env._prefix assert loaded_env._pprefix is not env._pprefix assert loaded_env._workdir is not env._workdir assert len(loaded_env.get_vms().values()) == len(vms.values()) for vm in loaded_env.get_vms().values(): assert vm.state() == 'running' for vm in loaded_env.get_vms().values(): assert vm.ssh_reachable(tries=200)
def test_load_env_up(env, vms, tmp_workdir): workdir = os.path.join(str(tmp_workdir), 'lago') logfile = os.path.join(str(tmp_workdir), 'lago-test_load_env_up.log') loaded_env = sdk.load_env(workdir, logfile=logfile) assert loaded_env is not env assert loaded_env._prefix is not env._prefix assert loaded_env._pprefix is not env._pprefix assert loaded_env._workdir is not env._workdir assert len(loaded_env.get_vms().values()) == len(vms.values()) for vm in loaded_env.get_vms().values(): assert vm.state() == 'running' for vm in loaded_env.get_vms().values(): assert vm.ssh_reachable(tries=200)
def test_load_env_down(env, tmp_workdir): env.stop() workdir = os.path.join(str(tmp_workdir), 'lago') logfile = os.path.join(str(tmp_workdir), 'lago-test_load_env_down.log') loaded_env = sdk.load_env(workdir, logfile=logfile) assert loaded_env is not env assert loaded_env._prefix is not env._prefix assert loaded_env._pprefix is not env._pprefix assert loaded_env._workdir is not env._workdir for vm in loaded_env.get_vms().values(): assert vm.state() == 'down' loaded_env.start() for vm in loaded_env.get_vms().values(): assert vm.ssh_reachable(tries=200)
def test_load_env_down(env, tmp_workdir): env.stop() workdir = os.path.join(str(tmp_workdir), 'lago') logfile = os.path.join(str(tmp_workdir), 'lago-test_load_env_down.log') loaded_env = sdk.load_env(workdir, logfile=logfile) assert loaded_env is not env assert loaded_env._prefix is not env._prefix assert loaded_env._pprefix is not env._pprefix assert loaded_env._workdir is not env._workdir for vm in loaded_env.get_vms().values(): assert vm.state() == 'down' loaded_env.start() for vm in loaded_env.get_vms().values(): assert vm.ssh_reachable(tries=200)
def env(artifacts_path): workdir = pytest.config.getoption('--lago-env') lago_log_path = os.path.join(workdir, 'default/logs/lago.log') lago_env = lagosdk.load_env(workdir=workdir, logfile=lago_log_path, loglevel=logging.DEBUG) # TODO: once a proper solution for repo server w/o OST lago plugin # is available, remove this hack and use it instead. try: repo_server = create_repo_server(workdir, lago_env) yield lago_env finally: repo_server.shutdown() shutil.move(lago_log_path, artifacts_path)
def env(artifacts_path): workdir = pytest.config.getoption('--lago-env') lago_log_path = os.path.join(workdir, 'default/logs/lago.log') lago_env = lagosdk.load_env( workdir=workdir, logfile=lago_log_path, loglevel=logging.DEBUG ) # TODO: once a proper solution for repo server w/o OST lago plugin # is available, remove this hack and use it instead. try: repo_server = create_repo_server(workdir, lago_env) yield lago_env finally: repo_server.shutdown() shutil.move(lago_log_path, artifacts_path)
def env(artifacts_path): workdir = pytest.config.getoption('--lago-env') lago_log_path = os.path.join(workdir, 'default/logs/lago.log') lago_env = lagosdk.load_env(workdir=workdir, logfile=lago_log_path, loglevel=logging.DEBUG) # When OST is run over an el8 distro the repo server is no longer # required due to the introduction of prebuilt ost-images. But when OST is # run over an el7 distro, the repo server is still required. use_repo_server = os.environ.get("USE_LAGO_OST_PLUGIN", "0") == "1" try: if use_repo_server: repo_server = create_repo_server(workdir, lago_env) yield lago_env finally: if use_repo_server: repo_server.shutdown() shutil.move(lago_log_path, artifacts_path)
def add_host_image_to_dest(prefix_path, dest): ''' Creates a symlink to the host's base image in dest. Args: prefix_path (str): Path to the prefix dest (str): Where to create the symlink ''' prefix = sdk.load_env(prefix_path) environ['LAGO_PREFIX_PATH'] = path.join(prefix_path, 'current') disk_path = _get_host(prefix).disks[0]['path'] backing_file_path = get_qemu_info(disk_path).get('backing-filename') if not backing_file_path: raise RuntimeError('Failed to add image {} to {}'.format( disk_path, dest)) if path.isdir(dest): dest = path.join(dest, path.basename(backing_file_path)) symlink(backing_file_path, dest)
def env(cls_results_path): config = 'init-jenkins.yaml' workdir = '/tmp/lago-workdir' raise NotImplementedError('Implement me') try: lago_env = sdk.init( config=config, workdir=workdir, logfile=os.path.join(cls_results_path, 'lago.log'), loglevel=logging.DEBUG ) except PrefixAlreadyExists: lago_env = sdk.load_env( workdir=workdir, logfile=os.path.join(cls_results_path, 'lago.log'), loglevel=logging.DEBUG ) lago_env.start() yield lago_env
def env(cls_results_path): config = 'init-jenkins.yaml' workdir = '/tmp/lago-workdir' try: lago_env = sdk.init(config=config, workdir=workdir, logfile=os.path.join(cls_results_path, 'lago.log'), loglevel=logging.DEBUG) except PrefixAlreadyExists: lago_env = sdk.load_env(workdir=workdir, logfile=os.path.join(cls_results_path, 'lago.log'), loglevel=logging.DEBUG) lago_env.start() yield lago_env # Task: Add log collection. The logs should be collected to a # sub directory of 'cls_result_path collect_path = os.path.join(cls_results_path, 'collect') lago_env.collect_artifacts(output_dir=collect_path, ignore_nopath=True)