コード例 #1
0
ファイル: cmd.py プロジェクト: bellle/lago
def do_list(workdir_path, out_format, **kwargs):
    if not workdir_path:
        workdir_path = lago_workdir.Workdir.resolve_workdir_path()

    workdir = lago_workdir.Workdir(path=workdir_path)
    workdir.load()
    resources = workdir.prefixes.keys()

    print(out_format.format(resources))
コード例 #2
0
ファイル: cmd.py プロジェクト: igoihman/lago
def do_list(prefix, resource_type, out_format, prefix_path, workdir_path,
            **kwargs):
    if resource_type in ['prefixes', 'envs']:
        if prefix_path:
            raise RuntimeError('Using a plain prefix')
        else:
            if workdir_path == 'auto':
                workdir_path = lago_workdir.resolve_workdir_path()

            workdir = lago_workdir.Workdir(path=workdir_path)
            workdir.load()
            resources = workdir.prefixes.keys()

    print out_format.format(resources)
コード例 #3
0
def load_env(workdir, logfile=None, loglevel=logging.INFO):
    """
    Load an existing Lago environment

    Args:
        workdir(str): Path to the workdir directory, as created by
        :func:`~lago.sdk.init` or created by the CLI.
        logfile(str): A Path to setup a log file.
        loglevel(int): :mod:`logging` log level.

    Returns:
        :class:`~lago.sdk.SDK`: Initialized Lago environment

    Raises:
       :exc:`~lago.utils.LagoException`: If loading the environment failed.
    """

    setup_sdk_logging(logfile, loglevel)
    workdir = os.path.abspath(workdir)
    loaded_workdir = lago_workdir.Workdir(path=workdir)
    prefix = loaded_workdir.get_prefix('current')
    return SDK(loaded_workdir, prefix)
コード例 #4
0
ファイル: cmd.py プロジェクト: 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
コード例 #5
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