From 494dea763857f784fb789243bda569c5bec0f10a Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 21 Jul 2011 11:15:43 -0400 Subject: Miscellaneous bcfg2-admin bug fixes: * Fixed mode argument parsing when a config file is supplied * Fixed loading help messages when Reports is not configured * Improved option parsing; used Bcfg2.Options.OptionParser --- src/lib/Server/Admin/Reports.py | 7 +++--- src/lib/Server/Admin/Xcmd.py | 7 ++---- src/sbin/bcfg2-admin | 55 +++++++++++++++++++++-------------------- 3 files changed, 33 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Admin/Reports.py b/src/lib/Server/Admin/Reports.py index c9f3d3f58..b4c3b5fcd 100644 --- a/src/lib/Server/Admin/Reports.py +++ b/src/lib/Server/Admin/Reports.py @@ -28,10 +28,9 @@ import django.core.management # FIXME - settings file uses a hardcoded path for /etc/bcfg2.conf try: import Bcfg2.Server.Reports.settings -except Exception: - e = sys.exc_info()[1] - sys.stderr.write("Failed to load configuration settings. %s\n" % e) - sys.exit(1) +except Exception, err: + sys.stderr.write("Failed to load configuration settings. %s\n" % err) + raise SystemExit(1) project_directory = os.path.dirname(Bcfg2.Server.Reports.settings.__file__) project_name = os.path.basename(project_directory) diff --git a/src/lib/Server/Admin/Xcmd.py b/src/lib/Server/Admin/Xcmd.py index 2cb085346..6147139fb 100644 --- a/src/lib/Server/Admin/Xcmd.py +++ b/src/lib/Server/Admin/Xcmd.py @@ -1,5 +1,3 @@ -import sys - import Bcfg2.Options import Bcfg2.Proxy import Bcfg2.Server.Admin @@ -24,7 +22,7 @@ class Xcmd(Bcfg2.Server.Admin.Mode): 'timeout': Bcfg2.Options.CLIENT_TIMEOUT, } setup = Bcfg2.Options.OptionParser(optinfo) - setup.parse(sys.argv[2:]) + setup.parse(args) Bcfg2.Proxy.RetryMethod.max_retries = 1 proxy = Bcfg2.Proxy.ComponentProxy(setup['server'], setup['user'], @@ -42,8 +40,7 @@ class Xcmd(Bcfg2.Server.Admin.Mode): args = tuple(setup['args'][1:]) try: data = getattr(proxy, cmd)(*args) - except xmlrpclib.Fault: - flt = sys.exc_info()[1] + except xmlrpclib.Fault, flt: if flt.faultCode == 7: print("Unknown method %s" % cmd) return diff --git a/src/sbin/bcfg2-admin b/src/sbin/bcfg2-admin index 1434afd97..4c92a0e2e 100755 --- a/src/sbin/bcfg2-admin +++ b/src/sbin/bcfg2-admin @@ -1,7 +1,7 @@ #!/usr/bin/env python """bcfg2-admin is a script that helps to administrate a Bcfg2 deployment.""" -from optparse import OptionParser +import sys import logging import Bcfg2.Server.Core import Bcfg2.Logger @@ -33,51 +33,52 @@ def create_description(): try: description.write((" %-15s %s\n" % (mode, mode_import(mode).__shorthelp__))) - except ImportError: - continue + except (ImportError, SystemExit): + pass return description.getvalue() def main(): - Bcfg2.Logger.setup_logging('bcfg2-admin', to_console=True, level=40) - usage = "Usage: %prog [options] MODE [args]" - parser = OptionParser(usage=usage) - parser.set_defaults(configfile=Bcfg2.Options.CFILE.default) - parser.add_option("-C", "--configfile", - dest="configfile", - help="Path to bcfg2.conf", - metavar="FILE") - parser.disable_interspersed_args() - (options, args) = parser.parse_args() + optinfo = { + 'configfile': Bcfg2.Options.CFILE, + 'help': Bcfg2.Options.HELP, + 'verbose': Bcfg2.Options.VERBOSE, + } + setup = Bcfg2.Options.OptionParser(optinfo) + setup.parse(sys.argv[1:]) + + log_args = dict(to_syslog=False, to_console=logging.WARNING) + if setup['verbose']: + log_args['to_console'] = logging.DEBUG # Provide help if requested or no args were specified - if len(args) < 1 or args[0] == 'help': - if len(args) > 1: + if (not setup['args'] or len(setup['args']) < 1 or + setup['args'][0] == 'help' or setup['help']): + if len(setup['args']) > 1: # Get help for a specific mode by passing it the help argument - args = [args[1], args[0]] + setup['args'] = [setup['args'][1], setup['args'][0]] else: # Print short help for all modes - parser.print_help() + print("Usage:\n %s" % setup.buildHelpMessage()) print(create_description()) raise SystemExit(0) - if args[0] in get_modes(): - modname = args[0].capitalize() - if len(args) == 1 or args[1] == 'help': + if setup['args'][0] in get_modes(): + modname = setup['args'][0].capitalize() + if len(setup['args']) == 1 or setup['args'][1] == 'help': print(mode_import(modname).__longhelp__) raise SystemExit(0) try: mode_cls = mode_import(modname) - except ImportError: - e = sys.exc_info()[1] - log.error("Failed to load admin mode %s: %s" % (modname, e)) + except ImportError, err: + log.error("Failed to load admin mode %s: %s" % (modname, err)) raise SystemExit(1) - mode = mode_cls(options.configfile) - mode(args[1:]) + mode = mode_cls(setup['configfile']) + mode(setup['args'][1:]) if hasattr(mode, 'bcore'): mode.bcore.shutdown() else: - log.error("Unknown mode %s" % args[0]) - parser.print_help() + log.error("Unknown mode %s" % setup['args'][0]) + print("Usage:\n %s" % setup.buildHelpMessage()) print(create_description()) raise SystemExit(1) -- cgit v1.2.3-1-g7c22