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)
Example #2
0
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)
Example #4
0
    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)
Example #5
0
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)
Example #6
0
    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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
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)
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)
Example #13
0
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)
Example #14
0
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
Example #16
0
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)