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))
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)
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)
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
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