aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sos/sosreport.py232
1 files changed, 107 insertions, 125 deletions
diff --git a/sos/sosreport.py b/sos/sosreport.py
index 87e0cc6c..121459c1 100644
--- a/sos/sosreport.py
+++ b/sos/sosreport.py
@@ -26,7 +26,8 @@ import traceback
import os
import errno
import logging
-from optparse import OptionParser, Option
+
+from argparse import ArgumentParser, Action
from sos.plugins import import_plugin
from sos.utilities import ImporterHelper
from stat import ST_UID, ST_GID, ST_MODE, ST_CTIME, ST_ATIME, ST_MTIME, S_IMODE
@@ -102,43 +103,15 @@ class TempFileUtil(object):
self.files = []
-class OptionParserExtended(OptionParser):
-
- """ Show examples """
-
- def print_help(self, out=sys.stdout):
- """ Prints help content including examples """
- OptionParser.print_help(self, out)
- print_()
- print_("Some examples:")
- print_()
- print_(" enable dlm plugin only and collect dlm lockdumps:")
- print_(" # sosreport -o dlm -k dlm.lockdump")
- print_()
- print_(" disable memory and samba plugins, turn off rpm -Va "
- "collection:")
- print_(" # sosreport -n memory,samba -k rpm.rpmva=off")
- print_()
-
-
-class SosOption(Option):
+class SosListOption(Action):
"""Allow to specify comma delimited list of plugins"""
- ACTIONS = Option.ACTIONS + ("extend",)
- STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
- TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
- def take_action(self, action, dest, opt, value, values, parser):
- """ Performs list extension on plugins """
- if action == "extend":
- try:
- lvalue = value.split(",")
- except:
- pass
- else:
- values.ensure_value(dest, deque()).extend(lvalue)
- else:
- Option.take_action(self, action, dest, opt, value, values, parser)
+ def __call__(self, parser, namespace, values, option_string=None):
+ items = [opt for opt in values.split(',')]
+ if getattr(namespace, self.dest):
+ items += getattr(namespace, self.dest)
+ setattr(namespace, self.dest, items)
class XmlReport(object):
@@ -577,96 +550,105 @@ class SoSOptions(object):
def _parse_args(self, args):
""" Parse command line options and arguments"""
- self.parser = parser = OptionParserExtended(option_class=SosOption)
- parser.add_option("-l", "--list-plugins", action="store_true",
- dest="list_plugins", default=False,
- help="list plugins and available plugin options")
- parser.add_option("-n", "--skip-plugins", action="extend",
- dest="noplugins", type="string",
- help="disable these plugins", default=deque())
- parser.add_option("--experimental", action="store_true",
- dest="experimental", default=False,
- help="enable experimental plugins")
- parser.add_option("-e", "--enable-plugins", action="extend",
- dest="enableplugins", type="string",
- help="enable these plugins", default=deque())
- parser.add_option("-o", "--only-plugins", action="extend",
- dest="onlyplugins", type="string",
- help="enable these plugins only", default=deque())
- parser.add_option("-k", "--plugin-option", action="extend",
- dest="plugopts", type="string",
- help="plugin options in plugname.option=value "
- "format (see -l)",
- default=deque())
- parser.add_option("--log-size", action="store",
- dest="log_size", default=10, type="int",
- help="set a limit on the size of collected logs "
- "(in MiB)")
- parser.add_option("-a", "--alloptions", action="store_true",
- dest="usealloptions", default=False,
- help="enable all options for loaded plugins")
- parser.add_option("--all-logs", action="store_true",
- dest="all_logs", default=False,
- help="collect all available logs regardless of size")
- parser.add_option("--batch", action="store_true",
- dest="batch", default=False,
- help="batch mode - do not prompt interactively")
- parser.add_option("--build", action="store_true",
- dest="build", default=False,
- help="preserve the temporary directory and do not "
- "package results")
- parser.add_option("-v", "--verbose", action="count",
- dest="verbosity",
- help="increase verbosity")
- parser.add_option("", "--verify", action="store_true",
- dest="verify", default=False,
- help="perform data verification during collection")
- parser.add_option("", "--quiet", action="store_true",
- dest="quiet", default=False,
- help="only print fatal errors")
- parser.add_option("--debug", action="count",
- dest="debug",
- help="enable interactive debugging using the python "
- "debugger")
- parser.add_option("--ticket-number", action="store",
- dest="case_id",
- help="specify ticket number")
- parser.add_option("--case-id", action="store",
- dest="case_id",
- help="specify case identifier")
- parser.add_option("-p", "--profile", action="extend",
- dest="profiles", type="string", default=deque(),
- help="enable plugins selected by the given profiles")
- parser.add_option("--list-profiles", action="store_true",
- dest="list_profiles", default=False,
- help="display a list of available profiles and "
- "plugins that they include")
- parser.add_option("--name", action="store",
- dest="customer_name",
- help="specify report name")
- parser.add_option("--config-file", action="store",
- dest="config_file",
- help="specify alternate configuration file")
- parser.add_option("--tmp-dir", action="store",
- dest="tmp_dir",
- help="specify alternate temporary directory",
- default=None)
- parser.add_option("--no-report", action="store_true",
- dest="noreport",
- help="disable HTML/XML reporting", default=False)
- parser.add_option("-s", "--sysroot", action="store", dest="sysroot",
- help="system root directory path (default='/')",
- default=None)
- parser.add_option("-c", "--chroot", action="store", dest="chroot",
- help="chroot executed commands to SYSROOT "
- "[auto, always, never] (default=auto)",
- default="auto")
- parser.add_option("-z", "--compression-type", dest="compression_type",
- help="compression technology to use [auto, "
- "gzip, bzip2, xz] (default=auto)",
- default="auto")
-
- return parser.parse_args(args)[0]
+ usage_string = ("%(prog)s [options]\n\n"
+ "Some examples:\n\n"
+ "enable dlm plugin only and collect dlm lockdumps:\n"
+ " # sosreport -o dlm -k dlm.lockdump\n\n"
+ "disable memory and samba plugins, turn off rpm "
+ "-Va collection:\n"
+ " # sosreport -n memory,samba -k rpm.rpmva=off")
+
+ self.parser = parser = ArgumentParser(usage=usage_string)
+ parser.register('action', 'extend', SosListOption)
+ parser.add_argument("-l", "--list-plugins", action="store_true",
+ dest="list_plugins", default=False,
+ help="list plugins and available plugin options")
+ parser.add_argument("-n", "--skip-plugins", action="extend",
+ dest="noplugins", type=str,
+ help="disable these plugins", default=deque())
+ parser.add_argument("--experimental", action="store_true",
+ dest="experimental", default=False,
+ help="enable experimental plugins")
+ parser.add_argument("-e", "--enable-plugins", action="extend",
+ dest="enableplugins", type=str,
+ help="enable these plugins", default=deque())
+ parser.add_argument("-o", "--only-plugins", action="extend",
+ dest="onlyplugins", type=str,
+ help="enable these plugins only", default=deque())
+ parser.add_argument("-k", "--plugin-option", action="extend",
+ dest="plugopts", type=str,
+ help="plugin options in plugname.option=value "
+ "format (see -l)",
+ default=deque())
+ parser.add_argument("--log-size", action="store",
+ dest="log_size", default=10, type=int,
+ help="set a limit on the size of collected logs "
+ "(in MiB)")
+ parser.add_argument("-a", "--alloptions", action="store_true",
+ dest="usealloptions", default=False,
+ help="enable all options for loaded plugins")
+ parser.add_argument("--all-logs", action="store_true",
+ dest="all_logs", default=False,
+ help="collect all available logs regardless "
+ "of size")
+ parser.add_argument("--batch", action="store_true",
+ dest="batch", default=False,
+ help="batch mode - do not prompt interactively")
+ parser.add_argument("--build", action="store_true",
+ dest="build", default=False,
+ help="preserve the temporary directory and do not "
+ "package results")
+ parser.add_argument("-v", "--verbose", action="count",
+ dest="verbosity", help="increase verbosity")
+ parser.add_argument("--verify", action="store_true",
+ dest="verify", default=False,
+ help="perform data verification during collection")
+ parser.add_argument("--quiet", action="store_true",
+ dest="quiet", default=False,
+ help="only print fatal errors")
+ parser.add_argument("--debug", action="count",
+ dest="debug",
+ help="enable interactive debugging using the "
+ "python debugger")
+ parser.add_argument("--ticket-number", action="store",
+ dest="case_id",
+ help="specify ticket number")
+ parser.add_argument("--case-id", action="store",
+ dest="case_id",
+ help="specify case identifier")
+ parser.add_argument("-p", "--profile", action="extend",
+ dest="profiles", type=str, default=deque(),
+ help="enable plugins used by the given profiles")
+ parser.add_argument("--list-profiles", action="store_true",
+ dest="list_profiles", default=False,
+ help="display a list of available profiles and "
+ "plugins that they include")
+ parser.add_argument("--name", action="store",
+ dest="customer_name",
+ help="specify report name")
+ parser.add_argument("--config-file", action="store",
+ dest="config_file",
+ help="specify alternate configuration file")
+ parser.add_argument("--tmp-dir", action="store",
+ dest="tmp_dir",
+ help="specify alternate temporary directory",
+ default=None)
+ parser.add_argument("--no-report", action="store_true",
+ dest="noreport",
+ help="disable HTML/XML reporting", default=False)
+ parser.add_argument("-s", "--sysroot", action="store", dest="sysroot",
+ help="system root directory path (default='/')",
+ default=None)
+ parser.add_argument("-c", "--chroot", action="store", dest="chroot",
+ help="chroot executed commands to SYSROOT "
+ "[auto, always, never] (default=auto)",
+ default="auto")
+ parser.add_argument("-z", "--compression-type",
+ dest="compression_type", default="auto",
+ help="compression technology to use [auto, "
+ "gzip, bzip2, xz] (default=auto)")
+
+ return parser.parse_args(args)
class SoSReport(object):