def delete_repo_file(cls): for repo_class, _dummy in get_repo_file_classes(): repo_file = repo_class() if os.path.exists(repo_file.path): os.unlink(repo_file.path) # When the repo is removed, also remove the override tracker WrittenOverrideCache.delete_cache()
def perform(self): # the [rhsm] manage_repos can be overridden to disable generation of the # redhat.repo file: if not self.manage_repos: log.debug("manage_repos is 0, skipping generation of repo files") for repo_class, _dummy in get_repo_file_classes(): repo_file = repo_class() if repo_file.exists(): log.info("Removing %s due to manage_repos configuration." % repo_file.path) RepoActionInvoker.delete_repo_file() return 0 repo_pairs = [] for repo_class, server_val_repo_class in get_repo_file_classes(): # Load the RepoFile from disk, this contains all our managed yum repo sections. # We want to instantiate late because having a long-lived instance creates the possibility # of reading the file twice. Despite it's name, the RepoFile object corresponds more to a # dictionary of config settings than a single file. Doing a double read can result in comments # getting loaded twice. A feedback loop can result causing the repo file to grow at O(n^2). # See BZ 1658409 repo_pairs.append((repo_class(), server_val_repo_class())) for repo_file, server_val_repo_file in repo_pairs: repo_file.read() server_val_repo_file.read() valid = set() # Iterate content from entitlement certs, and create/delete each section # in the RepoFile as appropriate: for cont in self.get_unique_content(): valid.add(cont.id) for repo_file, server_value_repo_file in repo_pairs: if cont.content_type in repo_file.CONTENT_TYPES: fixed_cont = repo_file.fix_content(cont) existing = repo_file.section(fixed_cont.id) server_value_repo = server_value_repo_file.section( fixed_cont.id) if server_value_repo is None: server_value_repo = fixed_cont server_value_repo_file.add(fixed_cont) if existing is None: repo_file.add(fixed_cont) self.report_add(fixed_cont) else: # Updates the existing repo with new content self.update_repo(existing, fixed_cont, server_value_repo) repo_file.update(existing) server_value_repo_file.update(server_value_repo) self.report_update(existing) # TODO: do not write new repo file and cache written_overrides, when nothing changed for repo_file, server_value_repo_file in repo_pairs: for section in server_value_repo_file.sections(): if section not in valid: self.report_delete(section) server_value_repo_file.delete(section) repo_file.delete(section) # Write new RepoFile(s) to disk: server_value_repo_file.write() repo_file.write() if self.override_supported: # Update with the values we just wrote self.written_overrides.overrides = self.overrides self.written_overrides.write_cache() log.debug("repos updated: %s" % self.report) return self.report
def perform(self): # the [rhsm] manage_repos can be overridden to disable generation of the # redhat.repo file: if not self.manage_repos: log.debug("manage_repos is 0, skipping generation of repo files") for repo_class, _dummy in get_repo_file_classes(): repo_file = repo_class() if repo_file.exists(): log.info("Removing %s due to manage_repos configuration." % repo_file.path) RepoActionInvoker.delete_repo_file() return 0 repo_pairs = [] for repo_class, server_val_repo_class in get_repo_file_classes(): # Load the RepoFile from disk, this contains all our managed yum repo sections. # We want to instantiate late because having a long-lived instance creates the possibility # of reading the file twice. Despite it's name, the RepoFile object corresponds more to a # dictionary of config settings than a single file. Doing a double read can result in comments # getting loaded twice. A feedback loop can result causing the repo file to grow at O(n^2). # See BZ 1658409 repo_pairs.append((repo_class(), server_val_repo_class())) for repo_file, server_val_repo_file in repo_pairs: repo_file.read() server_val_repo_file.read() valid = set() # Iterate content from entitlement certs, and create/delete each section # in the RepoFile as appropriate: for cont in self.get_unique_content(): valid.add(cont.id) for repo_file, server_value_repo_file in repo_pairs: if cont.content_type in repo_file.CONTENT_TYPES: fixed_cont = repo_file.fix_content(cont) existing = repo_file.section(fixed_cont.id) server_value_repo = server_value_repo_file.section(fixed_cont.id) if server_value_repo is None: server_value_repo = fixed_cont server_value_repo_file.add(fixed_cont) if existing is None: repo_file.add(fixed_cont) self.report_add(fixed_cont) else: # Updates the existing repo with new content self.update_repo(existing, fixed_cont, server_value_repo) repo_file.update(existing) server_value_repo_file.update(server_value_repo) self.report_update(existing) for repo_file, server_value_repo_file in repo_pairs: for section in server_value_repo_file.sections(): if section not in valid: self.report_delete(section) server_value_repo_file.delete(section) repo_file.delete(section) # Write new RepoFile(s) to disk: server_value_repo_file.write() repo_file.write() if self.override_supported: # Update with the values we just wrote self.written_overrides.overrides = self.overrides self.written_overrides.write_cache() log.info("repos updated: %s" % self.report) return self.report