From df219b43b5edab9868cb7d7511f7da1c1f5e225a Mon Sep 17 00:00:00 2001 From: "Bryn M. Reeves" Date: Wed, 1 Jul 2015 14:18:50 +0100 Subject: [PATCH] [general] verify --profile contains valid plugins only If --profile contains an invalid profile name, stop, and print the list of available profiles as well as the offending profile name (helpful when multiple profiles have been specified). E.g.: sosreport (version 3.2) Unknown or inactive profile(s) provided: virtuous The following profiles are available: boot boot, startup, systemd, udev cluster [...] Based on a patch from Pavel Moravec. Fixes #505. Signed-off-by: Bryn M. Reeves --- sos/sosreport.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sos/sosreport.py.orig b/sos/sosreport.py index 7ea7b33..2af9de5 100644 --- a/sos/sosreport.py.orig +++ b/sos/sosreport.py @@ -844,6 +844,7 @@ class SoSReport(object): self.plugin_names = deque() self.profiles = set() using_profiles = len(self.opts.profiles) + remaining_profiles = list(self.opts.profiles) # validate and load plugins for plug in plugins: plugbase, ext = os.path.splitext(plug) @@ -896,12 +897,21 @@ class SoSReport(object): self._skip(plugin_class, _("not specified")) continue + for i in plugin_class.profiles: + if i in remaining_profiles: + remaining_profiles.remove(i) + self._load(plugin_class) except Exception as e: self.soslog.warning(_("plugin %s does not install, " "skipping: %s") % (plug, e)) if self.raise_plugins: raise + if len(remaining_profiles) > 0: + self.soslog.error(_("Unknown or inactive profile(s) provided:" + " %s") % ", ".join(remaining_profiles)) + self.list_profiles() + self._exit(1) def _set_all_options(self): if self.opts.usealloptions: