diff options
author | Fabian Affolter <fabian@bernewireless.net> | 2010-12-08 23:27:15 +0100 |
---|---|---|
committer | Fabian Affolter <fabian@bernewireless.net> | 2010-12-08 23:27:15 +0100 |
commit | e833a7a76b231cd346f09c9a422ecb855d1cc6b4 (patch) | |
tree | e2762fc31e1162a6859dbd6cd7b5c28208296d9d /build/scripts-2.7/bcfg2-admin | |
parent | baf5854f414c2a35887e3fbbcfd094e12e7c6ee7 (diff) | |
download | bcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.tar.gz bcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.tar.bz2 bcfg2-e833a7a76b231cd346f09c9a422ecb855d1cc6b4.zip |
Merge with upstream
Diffstat (limited to 'build/scripts-2.7/bcfg2-admin')
-rwxr-xr-x | build/scripts-2.7/bcfg2-admin | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/build/scripts-2.7/bcfg2-admin b/build/scripts-2.7/bcfg2-admin new file mode 100755 index 000000000..4d5ab2e5b --- /dev/null +++ b/build/scripts-2.7/bcfg2-admin @@ -0,0 +1,80 @@ +#!/usr/bin/python +"""bcfg2-admin is a script that helps to administrate a Bcfg2 deployment.""" + +from optparse import OptionParser +from StringIO import StringIO +import logging +import Bcfg2.Server.Core +import Bcfg2.Logger +import Bcfg2.Options + +log = logging.getLogger('bcfg2-admin') + +import Bcfg2.Server.Admin + +def mode_import(modename): + """Load Bcfg2.Server.Admin.<mode>.""" + modname = modename.capitalize() + mod = getattr(__import__("Bcfg2.Server.Admin.%s" % + (modname)).Server.Admin, modname) + return getattr(mod, modname) + +def get_modes(): + """Get all available modes, except for the base mode.""" + return [x.lower() for x in Bcfg2.Server.Admin.__all__ if x != 'mode'] + +def create_description(): + """Create the description string from the list of modes.""" + modes = get_modes() + description = StringIO() + description.write("Available modes are:\n\n") + for mode in modes: + try: + description.write((" %-15s %s\n" % + (mode, mode_import(mode).__shorthelp__))) + except ImportError: + continue + 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() + + # Provide help if requested or no args were specified + if len(args) < 1 or args[0] == 'help': + if len(args) > 1: + # Get help for a specific mode by passing it the help argument + args = [args[1], args[0]] + else: + # Print short help for all modes + parser.print_help() + print create_description() + raise SystemExit(0) + + if args[0] in get_modes(): + modname = args[0].capitalize() + try: + mode_cls = mode_import(modname) + except ImportError, e: + log.error("Failed to load admin mode %s: %s" % (modname, e)) + raise SystemExit(1) + mode = mode_cls(options.configfile) + mode(args[1:]) + if hasattr(mode, 'bcore'): + mode.bcore.shutdown() + else: + log.error("Unknown mode %s" % args[0]) + parser.print_help() + print create_description() + raise SystemExit(1) + +if __name__ == '__main__': + main() |