def get_repos(self, apply_overrides=True): action = RepoUpdateActionCommand(cache_only=self.cache_only, apply_overrides=apply_overrides) repos = action.get_unique_content() current = set() # Add the current repo data yum_repo_file = YumRepoFile() yum_repo_file.read() server_value_repo_file = YumRepoFile('var/lib/rhsm/repo_server_val/') server_value_repo_file.read() for repo in repos: existing = yum_repo_file.section(repo.id) server_value_repo = server_value_repo_file.section(repo.id) # we need a repo in the server val file to match any in # the main repo definition file if server_value_repo is None: server_value_repo = repo server_value_repo_file.add(repo) if existing is None: current.add(repo) else: action.update_repo(existing, repo, server_value_repo) current.add(existing) return current
def test_configparsers_equal(self, tidy_writer, stub_create): rf = YumRepoFile() other = RawConfigParser() for parser in [rf, other]: parser.add_section('test') parser.set('test', 'key', 'val') self.assertTrue(rf._configparsers_equal(other))
def get_repo_file(self): yum_repo_file = YumRepoFile() return yum_repo_file.path
def _set_repo_status(self, repos, repo_action_invoker, repo_actions): """ Given a list of repo actions (tuple of enable/disable and repo ID), build a list without duplicates to send to the server. """ rc = 0 # Maintain a dict of repo to enabled/disabled status. This allows us # to remove dupes and send only the last action specified by the user # on the command line. Items will be overwritten as we process the CLI # arguments in order. repos_to_modify = {} if not len(repos): print(_("This system has no repositories available through subscriptions.")) return 1 for (status, repoid) in repo_actions: matches = set([repo for repo in repos if fnmatch.fnmatch(repo.id, repoid)]) if not matches: rc = 1 print( _( "Error: '{repoid}' does not match a valid repository ID. " 'Use "subscription-manager repos --list" to see valid repositories.' ).format(repoid=repoid) ) log.warning("'{repoid}' does not match a valid repository ID.".format(repoid=repoid)) # Overwrite repo if it's already in the dict, we want the last # match to be the one sent to server. for repo in matches: repos_to_modify[repo] = status if repos_to_modify: # The cache should be primed at this point by the # repo_action_invoker.get_repos() cache = inj.require(inj.OVERRIDE_STATUS_CACHE) if self.is_registered() and self.use_overrides: overrides = [ {"contentLabel": repo.id, "name": "enabled", "value": repos_to_modify[repo]} for repo in repos_to_modify ] metadata_overrides = [ {"contentLabel": repo.id, "name": "enabled_metadata", "value": repos_to_modify[repo]} for repo in repos_to_modify ] overrides.extend(metadata_overrides) results = self.cp.setContentOverrides(self.identity.uuid, overrides) cache = inj.require(inj.OVERRIDE_STATUS_CACHE) # Update the cache with the returned JSON cache.server_status = results cache.write_cache() repo_action_invoker.update() else: # When subscription-manager is in offline mode, then we have to generate redhat.repo from # entitlement certificates rl = RepoActionInvoker() rl.update() # In the disconnected case we must modify the repo file directly. changed_repos = [repo for repo in matches if repo["enabled"] != status] for repo in changed_repos: repo["enabled"] = status repo["enabled_metadata"] = status if changed_repos: repo_file = YumRepoFile() repo_file.read() for repo in changed_repos: repo_file.update(repo) repo_file.write() for repo in repos_to_modify: # Watchout for string comparison here: if repos_to_modify[repo] == "1": print(_("Repository '{repoid}' is enabled for this system.").format(repoid=repo.id)) else: print(_("Repository '{repoid}' is disabled for this system.").format(repoid=repo.id)) return rc