diff options
author | Jake Hunsaker <jhunsake@redhat.com> | 2021-08-11 10:48:41 -0400 |
---|---|---|
committer | Jake Hunsaker <jhunsake@redhat.com> | 2021-08-11 11:27:33 -0400 |
commit | fd75745e7a5a6c5def8e6d23190227872b9912c3 (patch) | |
tree | 141cc3784d65a40fd8189da8178b8837e5116ff9 | |
parent | f054370e99dd9fe9ab83dacda16ab0efaecbf865 (diff) | |
download | sos-fd75745e7a5a6c5def8e6d23190227872b9912c3.tar.gz |
[sosnode] Fix passing of plugin options when using `--only-plugins`
Fixes the handling of plugin options passed by `sos collect` to each
node by first aligning the SoSOption name to those of `report`
(`plugopts`), and second re-arranges the handling of plugin options and
preset options passed by the user when also using `--only-plugins` so
that the former are preserved and passed only with the `--only-plugins`
option value.
Resolves: #2641
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
-rw-r--r-- | sos/collector/__init__.py | 5 | ||||
-rw-r--r-- | sos/collector/sosnode.py | 34 |
2 files changed, 20 insertions, 19 deletions
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py index 57ef074e..70b7a69e 100644 --- a/sos/collector/__init__.py +++ b/sos/collector/__init__.py @@ -84,7 +84,7 @@ class SoSCollector(SoSComponent): 'only_plugins': [], 'password': False, 'password_per_node': False, - 'plugin_options': [], + 'plugopts': [], 'plugin_timeout': None, 'cmd_timeout': None, 'preset': '', @@ -273,7 +273,8 @@ class SoSCollector(SoSComponent): help="chroot executed commands to SYSROOT") sos_grp.add_argument('-e', '--enable-plugins', action="extend", help='Enable specific plugins for sosreport') - sos_grp.add_argument('-k', '--plugin-option', action="extend", + sos_grp.add_argument('-k', '--plugin-option', '--plugopts', + action="extend", dest='plugopts', help='Plugin option as plugname.option=value') sos_grp.add_argument('--log-size', default=0, type=int, help='Limit the size of individual logs (in MiB)') diff --git a/sos/collector/sosnode.py b/sos/collector/sosnode.py index 426edcba..5d05c297 100644 --- a/sos/collector/sosnode.py +++ b/sos/collector/sosnode.py @@ -667,10 +667,10 @@ class SosNode(): if self.cluster.sos_plugin_options: for opt in self.cluster.sos_plugin_options: - if not any(opt in o for o in self.plugin_options): + if not any(opt in o for o in self.plugopts): option = '%s=%s' % (opt, self.cluster.sos_plugin_options[opt]) - self.plugin_options.append(option) + self.plugopts.append(option) # set master-only options if self.cluster.check_node_is_master(self): @@ -688,7 +688,7 @@ class SosNode(): self.only_plugins = list(self.opts.only_plugins) self.skip_plugins = list(self.opts.skip_plugins) self.enable_plugins = list(self.opts.enable_plugins) - self.plugin_options = list(self.opts.plugin_options) + self.plugopts = list(self.opts.plugopts) self.preset = list(self.opts.preset) def finalize_sos_cmd(self): @@ -754,6 +754,20 @@ class SosNode(): os.path.join(self.host.sos_bin_path, self.sos_bin) ) + if self.plugopts: + opts = [o for o in self.plugopts + if self._plugin_exists(o.split('.')[0]) + and self._plugin_option_exists(o.split('=')[0])] + if opts: + sos_opts.append('-k %s' % quote(','.join(o for o in opts))) + + if self.preset: + if self._preset_exists(self.preset): + sos_opts.append('--preset=%s' % quote(self.preset)) + else: + self.log_debug('Requested to enable preset %s but preset does ' + 'not exist on node' % self.preset) + if self.only_plugins: plugs = [o for o in self.only_plugins if self._plugin_exists(o)] if len(plugs) != len(self.only_plugins): @@ -792,20 +806,6 @@ class SosNode(): if enable: sos_opts.append('--enable-plugins=%s' % quote(enable)) - if self.plugin_options: - opts = [o for o in self.plugin_options - if self._plugin_exists(o.split('.')[0]) - and self._plugin_option_exists(o.split('=')[0])] - if opts: - sos_opts.append('-k %s' % quote(','.join(o for o in opts))) - - if self.preset: - if self._preset_exists(self.preset): - sos_opts.append('--preset=%s' % quote(self.preset)) - else: - self.log_debug('Requested to enable preset %s but preset does ' - 'not exist on node' % self.preset) - self.sos_cmd = "%s %s" % (sos_cmd, ' '.join(sos_opts)) self.log_info('Final sos command set to %s' % self.sos_cmd) self.manifest.add_field('final_sos_command', self.sos_cmd) |