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
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
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()
def wrapper(prefix, *args, **kwargs): log_utils.setup_prefix_logging(prefix.paths.logs()) return func(*args, prefix=prefix, **kwargs)
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