def perform(): # NOTE: this one action is out of unit-tests completely; we do not use # in unit tests the LEAPP_DEVEL_SKIP_RHSM envar anymore _check_deprecated_rhsm_skip() indata = _InputData() prod_cert_path = _get_product_certificate_path() with overlaygen.create_source_overlay(mounts_dir=constants.MOUNTS_DIR, scratch_dir=constants.SCRATCH_DIR, storage_info=indata.storage_info, xfs_info=indata.xfs_info) as overlay: with overlay.nspawn() as context: target_repoids = _gather_target_repositories( context, indata, prod_cert_path) _create_target_userspace(context, indata.packages, indata.files, target_repoids) # TODO: this is tmp solution as proper one needs significant refactoring target_repo_facts = repofileutils.get_parsed_repofiles(context) api.produce( TMPTargetRepositoriesFacts(repositories=target_repo_facts)) # ## TODO ends here api.produce( UsedTargetRepositories(repos=[ UsedTargetRepository(repoid=repo) for repo in target_repoids ])) api.produce( TargetUserSpaceInfo(path=_get_target_userspace(), scratch=constants.SCRATCH_DIR, mounts=constants.MOUNTS_DIR))
def _get_rhui_available_repoids(context, cloud_repo): repofiles = repofileutils.get_parsed_repofiles(context) # TODO: same refactoring as Issue #486? _inhibit_on_duplicate_repos(repofiles) repoids = [] for rfile in repofiles: if rfile.file == cloud_repo and rfile.data: repoids = [repo.repoid for repo in rfile.data] repoids.sort() break return set(repoids)
def _get_all_available_repoids(context): repofiles = repofileutils.get_parsed_repofiles(context) # TODO: this is not good solution, but keep it as it is now # Issue: #486 if rhsm.skip_rhsm(): # only if rhsm is skipped, the duplicate repos are not detected # automatically and we need to do it extra _inhibit_on_duplicate_repos(repofiles) repoids = [] for rfile in repofiles: if rfile.data: repoids += [repo.repoid for repo in rfile.data] return set(repoids)
def get_available_repo_ids(context): """ Retrieve repo ids of all the repositories available through the subscription-manager. :param context: An instance of a mounting.IsolatedActions class :type context: mounting.IsolatedActions class :return: Repositories that are available to the current system through the subscription-manager :rtype: List(string) """ # Regenerated redhat.repo file ... # FIXME: try to come up with something less invasive than yum clean all # but still safe to call.. cmd = ['yum', 'clean', 'all'] try: context.call(cmd) except CalledProcessError as exc: raise StopActorExecutionError('Unable to use yum successfully', details={ 'details': str(exc), 'stderr': exc.stderr }) repofiles = repofileutils.get_parsed_repofiles(context) # TODO: move this functionality out! Create check actor that will do # the inhibit. The functionality is really not good here in the current # shape of the leapp-repository. See the targetuserspacecreator and # systemfacts actor if this is moved out. # Issue: #486 _inhibit_on_duplicate_repos(repofiles) rhsm_repos = [] for rfile in repofiles: if rfile.file == _DEFAULT_RHSM_REPOFILE and rfile.data: rhsm_repos = [repo.repoid for repo in rfile.data] rhsm_repos.sort() break list_separator_fmt = '\n - ' if rhsm_repos: api.current_logger().info( 'The following repoids are available through RHSM:{0}{1}'.format( list_separator_fmt, list_separator_fmt.join(rhsm_repos))) else: api.current_logger().info('There are no repos available through RHSM.') return rhsm_repos
def get_repositories_status(): ''' Get a basic information about YUM repositories installed in the system ''' return RepositoriesFacts(repositories=repofileutils.get_parsed_repofiles())