diff options
author | Jake Hunsaker <jhunsake@redhat.com> | 2022-04-05 14:53:03 -0400 |
---|---|---|
committer | Jake Hunsaker <jhunsake@redhat.com> | 2022-04-07 12:34:06 -0400 |
commit | 8cdc77c484c12b5ecaa901c892bc5799ef468e32 (patch) | |
tree | 7b2ea02a05b56210093addb512edd9dbd4544ad3 | |
parent | ee0dd68199a2c9296eafe64ead5b2263c8270e4a (diff) | |
download | sos-8cdc77c484c12b5ecaa901c892bc5799ef468e32.tar.gz |
[dnf,yum] Merge plugins into dnf, remove yum plugin
`dnf` has long been the successor to `yum` for RPM based distributions,
with the latter remaining as a legacy feature. In fact, in most cases
`yum` is now simply a symlink to `dnf`.
As such, merge missing collections from `yum` into the `dnf` plugin
where appropriate, and then remove the `yum` plugin.
Collections still referencing yum locations, such as `/etc/yum.repos.d/`
that are still used by `dnf` are brought forward and retain their
`yum_*` tags in the manifest in addition to new `dnf_*` tags.
The `history` plugin option has been removed and this is now a default
collection - previously it was gated to avoid duplication with the `yum`
plugin. The `history-info` option has also been slightly changed to only
capture the last 50 transactions instead of potentially up to hundreds
retained by `dnf`.
Closes: #1954
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
-rw-r--r-- | sos/report/plugins/dnf.py | 56 | ||||
-rw-r--r-- | sos/report/plugins/yum.py | 129 |
2 files changed, 47 insertions, 138 deletions
diff --git a/sos/report/plugins/dnf.py b/sos/report/plugins/dnf.py index 9725e0da..59b8de6c 100644 --- a/sos/report/plugins/dnf.py +++ b/sos/report/plugins/dnf.py @@ -12,6 +12,18 @@ from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt class DNFPlugin(Plugin, RedHatPlugin): + """ + The DNF plugin collects information for the dnf package manager and how it + is configured for local system. + + By default, this plugin will collect configuration files from /etc/dnf, + repo files defined in /etc/yum.repos.d/, module information, and various + 'dnf list' commands. + + When using the 'history-info' option, detailed transaction information will + be collected for the most recent 50 dnf transactions, and will be saved to + the sos_commands/dnf/history-info directory. + """ short_desc = 'dnf package manager' plugin_name = "dnf" @@ -21,8 +33,6 @@ class DNFPlugin(Plugin, RedHatPlugin): packages = ('dnf',) option_list = [ - PluginOpt('history', default=False, - desc='collect transaction history'), PluginOpt('history-info', default=False, desc='collect detailed transaction history') ] @@ -42,10 +52,12 @@ class DNFPlugin(Plugin, RedHatPlugin): def setup(self): self.add_file_tags({ - '/etc/dnf/modules.d/.*.modules': 'dnf_modules' + '/etc/dnf/modules.d/.*.module': 'dnf_modules' }) self.add_copy_spec("/etc/dnf/") + self.add_copy_spec("/etc/yum.repos.d/", + tags=['yum_repos_d', 'dnf_repos_d', 'dnf_repo']) if self.get_option("all_logs"): self.add_copy_spec("/var/log/dnf.*") @@ -65,11 +77,30 @@ class DNFPlugin(Plugin, RedHatPlugin): "package-cleanup --problems" ]) - if self.get_option("history") and not self.get_option("history-info"): - self.add_cmd_output("dnf history") + self.add_cmd_output("dnf list installed", + tags=["yum_list_installed", "dnf_list_installed"]) + + self.add_cmd_output('dnf -C repolist', + tags=['yum_repolist', 'dnf_repolist']) + + self.add_cmd_output('dnf -C repolist --verbose') + + self.add_forbidden_path([ + "/etc/pki/entitlement/key.pem", + "/etc/pki/entitlement/*-key.pem" + ]) + + self.add_copy_spec([ + "/etc/pki/product/*.pem", + "/etc/pki/consumer/cert.pem", + "/etc/pki/entitlement/*.pem" + ]) - if self.get_option("history-info"): - history = self.collect_cmd_output("dnf history") + if not self.get_option("history-info"): + self.add_cmd_output("dnf history", tags='dnf_history') + else: + history = self.collect_cmd_output("dnf history", + tags='dnf_history') transactions = -1 if history['output']: for line in history['output'].splitlines(): @@ -78,12 +109,19 @@ class DNFPlugin(Plugin, RedHatPlugin): break except ValueError: pass - for tr_id in range(1, transactions+1): - self.add_cmd_output("dnf history info %d" % tr_id) + for tr_id in range(1, min(transactions+1, 50)): + self.add_cmd_output("dnf history info %d" % tr_id, + subdir="history-info", + tags='dnf_history_info') # Get list of dnf installed modules and their details. module_cmd = "dnf --assumeno module list --installed" modules = self.collect_cmd_output(module_cmd) self.get_modules_info(modules['output']) + def postproc(self): + regexp = r"(proxy_password(\s)*=(\s)*)(\S+)\n" + repl = r"\1********\n" + self.do_path_regex_sub("/etc/yum.repos.d/*", regexp, repl) + # vim: set et ts=4 sw=4 : diff --git a/sos/report/plugins/yum.py b/sos/report/plugins/yum.py deleted file mode 100644 index e5256642..00000000 --- a/sos/report/plugins/yum.py +++ /dev/null @@ -1,129 +0,0 @@ -# This file is part of the sos project: https://github.com/sosreport/sos -# -# This copyrighted material is made available to anyone wishing to use, -# modify, copy, or redistribute it subject to the terms and conditions of -# version 2 of the GNU General Public License. -# -# See the LICENSE file in the source distribution for further information. - -from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt -import os - -YUM_PLUGIN_PATH = "/usr/lib/yum-plugins/" - - -class Yum(Plugin, RedHatPlugin): - - short_desc = 'yum information' - - plugin_name = 'yum' - profiles = ('system', 'packagemanager', 'sysmgmt') - - files = ('/etc/yum.conf',) - packages = ('yum',) - verify_packages = ('yum',) - - option_list = [ - PluginOpt('yumlist', default=False, desc='list repos and packages'), - PluginOpt('yumdebug', default=False, desc='collect yum debug data'), - PluginOpt('yum-history-info', default=False, - desc='collect yum history info for all transactions') - ] - - def setup(self): - - self.add_file_tags({ - '/etc/yum.repos.d/.*': 'yum_repos_d', - '/var/log/yum.log': 'yum_log', - '/etc/yum.conf': 'yum_conf' - }) - - # Pull all yum related information - self.add_copy_spec([ - "/etc/yum", - "/etc/yum.repos.d", - "/etc/yum.conf", - "/var/log/yum.log" - ]) - - # Get a list of channels the machine is subscribed to. - self.add_cmd_output("yum -C repolist", tags="yum_repolist") - - # Get the same list, but with various statistics related to its - # contents such as package count. - self.add_cmd_output("yum -C repolist --verbose") - - # Get list of available plugins and their configuration files. - if (self.path_exists(YUM_PLUGIN_PATH) and - self.path_isdir(YUM_PLUGIN_PATH)): - plugins = "" - for p in self.listdir(YUM_PLUGIN_PATH): - if not p.endswith(".py"): - continue - plugins = plugins + " " if len(plugins) else "" - plugins = plugins + self.path_join(YUM_PLUGIN_PATH, p) - if len(plugins): - self.add_cmd_output("rpm -qf %s" % plugins, - suggest_filename="plugin-packages") - plugnames = [ - os.path.basename(p)[:-3] for p in plugins.split() - ] - plugnames = "%s\n" % "\n".join(plugnames) - self.add_string_as_file(plugnames, "plugin-names", - plug_dir=True) - - self.add_copy_spec("/etc/yum/pluginconf.d") - - # candlepin info - self.add_forbidden_path([ - "/etc/pki/entitlement/key.pem", - "/etc/pki/entitlement/*-key.pem" - ]) - - self.add_copy_spec([ - "/etc/pki/product/*.pem", - "/etc/pki/consumer/cert.pem", - "/etc/pki/entitlement/*.pem" - ]) - - self.add_cmd_output([ - "yum history", - "yum list installed", - "package-cleanup --dupes", - "package-cleanup --problems" - ], cmd_as_tag=True) - - # packages installed/erased/updated per transaction - if self.get_option("yum-history-info"): - history = self.exec_cmd("yum history") - transactions = -1 - if history['status'] == 0: - for line in history['output'].splitlines(): - try: - transactions = int(line.split('|')[0].strip()) - break - except ValueError: - pass - for tr_id in range(1, transactions+1): - self.add_cmd_output("yum history info %d" % tr_id) - - if self.get_option("yumlist"): - # List various information about available packages - self.add_cmd_output("yum list") - - if self.get_option("yumdebug") and self.is_installed('yum-utils'): - # RHEL6+ alternative for this whole function: - # self.add_cmd_output("yum-debug-dump '%s'" - # % os.path.join(self.commons['dstroot'],"yum-debug-dump")) - r = self.exec_cmd("yum-debug-dump") - try: - self.add_cmd_output("zcat %s" % (r['output'].split()[-1],)) - except IndexError: - pass - - def postproc(self): - regexp = r"(proxy_password(\s)*=(\s)*)(\S+)\n" - repl = r"\1********\n" - self.do_path_regex_sub("/etc/yum.repos.d/*", regexp, repl) - -# vim: set et ts=4 sw=4 : |