#!/usr/bin/env python '''bcfg2-admin is a script that helps to administrate a bcfg2 deployment''' import getopt, logging, sys import Bcfg2.Server.Core, Bcfg2.Logger, Bcfg2.Options log = logging.getLogger('bcfg-admin') import Bcfg2.Server.Admin def mode_import(modename): '''Load Bcfg2.Server.Admin.''' modname = modename.capitalize() mod = getattr(__import__("Bcfg2.Server.Admin.%s" % (modname)).Server.Admin, modname) return getattr(mod, modname) if __name__ == '__main__': Bcfg2.Logger.setup_logging('bcfg2-admin', to_console=True, level=40) # Get config file path configfile = Bcfg2.Options.CFILE.default try: opts, args = getopt.getopt(sys.argv[1:], 'hC:', ['help', 'configfile=']) except getopt.GetoptError, msg: print msg raise SystemExit(1) do_help = False # First get the options... for opt, arg in opts: if opt in ("-h", "--help"): do_help = True if opt in ("-C", "--configfile"): configfile = arg modes = [x.lower() for x in Bcfg2.Server.Admin.__all__] modes.remove('mode') if do_help or len(args) < 1 or args[0] == 'help': if len(args) > 1: args = [args[1], args[0]] else: for mod in [mode_import(mode) for mode in modes]: print mod.__shorthelp__ raise SystemExit(0) if args[0] in modes: modname = args[0].capitalize() try: mode_cls = mode_import(modname) except ImportError, e: log.error("Failed to load admin mod %s: %s" % (modname, e)) mode = mode_cls(configfile) mode(args[1:]) else: print "unknown mode %s" % args[0]