Example #1
0
def do_init(
    prefix,
    virt_config,
    template_repo_path=None,
    template_repo_name=None,
    template_store=None,
    **kwargs
):
    prefix = lago.Prefix(prefix)
    prefix.initialize()

    with open(virt_config, 'r') as f:
        virt_conf = json.load(f)

    log_utils.setup_prefix_logging(prefix.paths.logs())

    try:
        if template_repo_path:
            repo = lago.templates.TemplateRepository.from_url(
                template_repo_path
            )
        else:
            try:
                repo_name = (
                    template_repo_name
                    or lago.config.get('template_default_repo')
                )
            except KeyError:
                raise RuntimeError(
                    'No template repo was configured or specified'
                )

            repo = lago.templates.find_repo_by_name(repo_name)

        template_store_path = (
            template_store or lago.config.get(
                'template_store',
                default=None
            )
        )
        store = lago.templates.TemplateStore(template_store_path)

        prefix.virt_conf(virt_conf, repo, store)
    except:
        shutil.rmtree(prefix.paths.prefixed(''))
        raise
Example #2
0
File: cmd.py Project: igoihman/lago
def do_init(workdir,
            virt_config,
            prefix_name='default',
            template_repo_path=None,
            template_repo_name=None,
            template_store=None,
            template_repos=None,
            set_current=False,
            skip_bootstrap=False,
            **kwargs):

    if virt_config is None and workdir is not None:
        virt_config = workdir
        workdir = None

    if workdir is None:
        workdir = os.path.abspath('.lago')

    if virt_config is None:
        virt_config = os.path.abspath('LagoInitFile')

    os.environ['LAGO_INITFILE_PATH'] = os.path.dirname(
        os.path.abspath(virt_config))

    if prefix_name == 'current':
        prefix_name = 'default'

    LOGGER.debug('Using workdir %s', workdir)
    workdir = lago_workdir.Workdir(workdir)
    if not os.path.exists(workdir.path):
        LOGGER.debug(
            'Initializing workdir %s with prefix %s',
            workdir.path,
            prefix_name,
        )
        prefix = workdir.initialize(prefix_name)
    else:
        LOGGER.debug(
            'Adding prefix %s to workdir %s',
            prefix_name,
            workdir.path,
        )
        prefix = workdir.add_prefix(prefix_name)

    log_utils.setup_prefix_logging(prefix.paths.logs())

    try:
        if template_repo_path:
            repo = lago.templates.TemplateRepository.from_url(
                template_repo_path)
        else:
            if template_repo_name:
                repo = lago.templates.find_repo_by_name(
                    name=template_repo_name)

            else:
                raise RuntimeError(
                    'No template repo was configured or specified')

        store = lago.templates.TemplateStore(template_store)

        with open(virt_config, 'r') as virt_fd:
            prefix.virt_conf_from_stream(
                virt_fd,
                repo,
                store,
                do_bootstrap=not skip_bootstrap,
            )

        if set_current:
            workdir.set_current(new_current=prefix_name)

    except:
        shutil.rmtree(prefix.paths.prefixed(''), ignore_errors=True)
        raise
Example #3
0
def do_init(
    workdir,
    virt_config,
    prefix_name='default',
    template_repo_path=None,
    template_repo_name=None,
    template_store=None,
    template_repos=None,
    set_current=False,
    skip_bootstrap=False,
    skip_build=False,
    **kwargs
):

    if virt_config is None and workdir is not None:
        virt_config = workdir
        workdir = None

    if workdir is None:
        workdir = os.path.abspath('.lago')

    if virt_config is None:
        virt_config = os.path.abspath('LagoInitFile')
    if not os.path.isfile(virt_config):
        raise LagoUserException(
            'Unable to find init file: {0}'.format(virt_config)
        )

    os.environ['LAGO_INITFILE_PATH'
               ] = os.path.dirname(os.path.abspath(virt_config))

    if prefix_name == 'current':
        prefix_name = 'default'

    with log_utils.LogTask('Initialize and populate prefix', LOGGER):
        LOGGER.debug('Using workdir %s', workdir)
        workdir = lago_workdir.Workdir(workdir)
        if not os.path.exists(workdir.path):
            LOGGER.debug(
                'Initializing workdir %s with prefix %s',
                workdir.path,
                prefix_name,
            )
            prefix = workdir.initialize(prefix_name)
        else:
            LOGGER.debug(
                'Adding prefix %s to workdir %s',
                prefix_name,
                workdir.path,
            )
            prefix = workdir.add_prefix(prefix_name)

        log_utils.setup_prefix_logging(prefix.paths.logs())

        try:
            if template_repo_path:
                repo = lago.templates.TemplateRepository.from_url(
                    template_repo_path
                )
            elif template_repo_name:
                repo = lago.templates.find_repo_by_name(
                    name=template_repo_name
                )

            else:
                raise RuntimeError(
                    'No template repo was configured or specified'
                )

            store = lago.templates.TemplateStore(template_store)

            with open(virt_config, 'r') as virt_fd:
                prefix.virt_conf_from_stream(
                    virt_fd,
                    repo,
                    store,
                    do_bootstrap=not skip_bootstrap,
                    do_build=not skip_build,
                )

            if set_current:
                workdir.set_current(new_current=prefix_name)

        except:
            workdir.cleanup()
            raise

        return workdir, prefix
Example #4
0
File: cmd.py Project: didib/lago
def do_init(
    workdir,
    virt_config,
    prefix_name='default',
    template_repo_path=None,
    template_repo_name=None,
    template_store=None,
    set_current=False,
    skip_bootstrap=False,
    **kwargs
):

    if virt_config is None and workdir is not None:
        virt_config = workdir
        workdir = None

    if workdir is None:
        workdir = os.path.abspath('.lago')

    if virt_config is None:
        virt_config = os.path.abspath('LagoInitFile')

    os.environ['LAGO_INITFILE_PATH'] = os.path.dirname(
        os.path.abspath(virt_config)
    )

    if prefix_name == 'current':
        prefix_name = 'default'

    LOGGER.debug('Using workdir %s', workdir)
    workdir = lago_workdir.Workdir(workdir)
    if not os.path.exists(workdir.path):
        LOGGER.debug(
            'Initializing workdir %s with prefix %s',
            workdir.path,
            prefix_name,
        )
        prefix = workdir.initialize(prefix_name)
    else:
        LOGGER.debug(
            'Adding prefix %s to workdir %s',
            prefix_name,
            workdir.path,
        )
        prefix = workdir.add_prefix(prefix_name)

    log_utils.setup_prefix_logging(prefix.paths.logs())

    try:
        if template_repo_path:
            repo = lago.templates.TemplateRepository.from_url(
                template_repo_path
            )
        else:
            try:
                repo_name = (
                    template_repo_name
                    or lago.config.get('template_default_repo')
                )
            except KeyError:
                raise RuntimeError(
                    'No template repo was configured or specified'
                )

            repo = lago.templates.find_repo_by_name(repo_name)

        template_store_path = (
            template_store or lago.config.get(
                'template_store', default=None
            )
        )
        store = lago.templates.TemplateStore(template_store_path)

        with open(virt_config, 'r') as virt_fd:
            prefix.virt_conf_from_stream(
                virt_fd,
                repo,
                store,
                do_bootstrap=not skip_bootstrap,
            )

        if set_current:
            workdir.set_current(new_current=prefix_name)

    except:
        shutil.rmtree(prefix.paths.prefixed(''), ignore_errors=True)
        raise
def do_deploy(vm, custom_sources, release, workdir, **kwargs):
    release = OvirtRelease(release)
    release_script = release.get_install_script()

    dist = None
    domains = {}
    for v in vm:
        m = get_definition_from_settings(v)
        if m is None:
            raise RuntimeError('Invalid VM definition: %s' % v)

        if dist is None:
            dist = m.distro.split('.')[0]
        elif dist != m.distro.split('.')[0]:
            raise RuntimeError('All the VMs must use the same distro')

        domains[m.name] = m.to_dict()
        domains[m.name]['metadata']['deploy-scripts'].insert(0, release_script)

    if dist is None:
        raise RuntimeError('Failed to detect distro')

    conf = {
        'domains': domains,
        'nets': {
            'ovirt-patch-verifier': {
                'type': 'nat',
                'dhcp': {
                    'start': 100,
                    'end': 254,
                },
                'management': True,
                'dns_domain_name': 'lago.local',
            },
        },
    }

    prefix_name = 'ovirt-patch-verifier'
    if workdir is None:
        workdir = os.path.abspath('deployment_ovirt-patch-verifier')
    LOGGER.debug('Using workdir %s', workdir)
    workdir = Workdir(workdir)
    if not os.path.exists(workdir.path):
        LOGGER.debug(
            'Initializing workdir %s with prefix %s',
            workdir.path,
            prefix_name,
        )
        prefix = workdir.initialize(prefix_name)
    else:
        raise RuntimeError('Prefix already initialized. Please cleanup.')

    setup_prefix_logging(prefix.paths.logs())

    try:
        repo = TemplateRepository.from_url(
            'http://templates.ovirt.org/repo/repo.metadata')

        template_store_path = config.get('template_store',
                                         '/var/lib/lago/store')
        store = TemplateStore(template_store_path)

        prefix.virt_conf(conf, repo, store, do_bootstrap=True)
        workdir.set_current(new_current=prefix_name)
    except:
        shutil.rmtree(prefix.paths.prefixed(''), ignore_errors=True)
        raise

    rpm_repo = config.get('reposync_dir', '/var/lib/lago/reposync')

    prefix = OvirtPrefix(os.path.join(workdir.path, prefix_name))
    prefix.prepare_repo(
        rpm_repo=rpm_repo,
        skip_sync=False,
        custom_sources=custom_sources or [],
    )

    prefix.start()

    prefix.deploy()
Example #6
0
 def wrapper(prefix, *args, **kwargs):
     log_utils.setup_prefix_logging(prefix.paths.logs())
     return func(*args, prefix=prefix, **kwargs)
Example #7
0
File: cmd.py Project: nirs/lago
def do_init(
    workdir,
    virt_config,
    prefix_name='default',
    template_repo_path=None,
    template_repo_name=None,
    template_store=None,
    template_repos=None,
    set_current=False,
    skip_bootstrap=False,
    skip_build=False,
    **kwargs
):

    if virt_config is None and workdir is not None:
        virt_config = workdir
        workdir = None

    if workdir is None:
        workdir = os.path.abspath('.lago')

    if virt_config is None:
        virt_config = os.path.abspath('LagoInitFile')
    if not os.path.isfile(virt_config):
        raise LagoUserException(
            'Unable to find init file: {0}'.format(virt_config)
        )

    os.environ['LAGO_INITFILE_PATH'] = os.path.dirname(
        os.path.abspath(virt_config)
    )

    if prefix_name == 'current':
        prefix_name = 'default'

    with log_utils.LogTask('Initialize and populate prefix', LOGGER):
        LOGGER.debug('Using workdir %s', workdir)
        workdir = lago_workdir.Workdir(workdir)
        if not (
            os.path.exists(workdir.path)
            and lago.workdir.Workdir.is_workdir(workdir.path)
        ):
            LOGGER.debug(
                'Initializing workdir %s with prefix %s',
                workdir.path,
                prefix_name,
            )
            prefix = workdir.initialize(prefix_name)
        else:
            LOGGER.debug(
                'Adding prefix %s to workdir %s',
                prefix_name,
                workdir.path,
            )
            prefix = workdir.add_prefix(prefix_name)

        log_utils.setup_prefix_logging(prefix.paths.logs())

        try:
            if template_repo_path:
                repo = lago.templates.TemplateRepository.from_url(
                    template_repo_path
                )
            elif template_repo_name:
                repo = lago.templates.find_repo_by_name(
                    name=template_repo_name
                )

            else:
                raise RuntimeError(
                    'No template repo was configured or specified'
                )

            store = lago.templates.TemplateStore(template_store)

            with open(virt_config, 'r') as virt_fd:
                prefix.virt_conf_from_stream(
                    virt_fd,
                    repo,
                    store,
                    do_bootstrap=not skip_bootstrap,
                    do_build=not skip_build,
                )

            if set_current:
                workdir.set_current(new_current=prefix_name)

        except:
            workdir.cleanup()
            raise

        return workdir, prefix