diff options
Diffstat (limited to 'ipa-python/config.py')
-rw-r--r-- | ipa-python/config.py | 95 |
1 files changed, 48 insertions, 47 deletions
diff --git a/ipa-python/config.py b/ipa-python/config.py index 5a9770e83..65ce30d9c 100644 --- a/ipa-python/config.py +++ b/ipa-python/config.py @@ -18,7 +18,7 @@ # import ConfigParser -from optparse import OptionParser +from optparse import OptionParser, IndentedHelpFormatter import krbV import socket @@ -35,6 +35,30 @@ class IPAConfigError(Exception): __str__ = __repr__ +class IPAFormatter(IndentedHelpFormatter): + """Our own optparse formatter that indents multiple lined usage string.""" + def format_usage(self, usage): + usage_string = "Usage:" + spacing = " " * len(usage_string) + lines = usage.split("\n") + ret = "%s %s\n" % (usage_string, lines[0]) + for line in lines[1:]: + ret += "%s %s\n" % (spacing, line) + return ret + +def verify_args(parser, args, needed_args = None): + """Verify that we have all positional arguments we need, if not, exit.""" + if needed_args: + needed_list = needed_args.split(" ") + else: + needed_list = [] + len_need = len(needed_list) + len_have = len(args) + if len_have > len_need: + parser.error("too many arguments") + elif len_have < len_need: + parser.error("no %s specified" % needed_list[len_have]) + class IPAConfig: def __init__(self): self.default_realm = None @@ -69,9 +93,15 @@ def __parse_config(): try: if not config.default_realm: config.default_realm = p.get("defaults", "realm") + except: + pass + try: if not len(config.default_server): s = p.get("defaults", "server") config.default_server = re.sub("\s+", "", s).split(',') + except: + pass + try: if not config.default_domain: config.default_domain = p.get("defaults", "domain") except: @@ -118,53 +148,27 @@ def __discover_config(): except: pass -def usage(): - return """ --realm\tset the IPA realm - --server\tset the IPA server - --domain\tset the IPA dns domain -""" - -def __parse_args(args): - # Can't use option parser because it doesn't easily leave - # unknown arguments - creating our own seems simpler. - # - # should make this more robust and handle --realm=foo syntax - out_args = [] - i = 0 - while i < len(args): - if args[i] == "--realm": - if i == len(args) - 1: - raise IPAConfigError("missing argument to --realm") - config.default_realm = args[i + 1] - i = i + 2 - continue - if args[i] == "--server": - if i == len(args) - 1: - raise IPAConfigError("missing argument to --server") - config.default_server.append(args[i + 1]) - i = i + 2 - continue - if args[i] == "--domain": - if i == len(args) - 1: - raise IPAConfigError("missing argument to --domain") - config.default_domain = args[i + 1] - i = i + 2 - continue - out_args.append(args[i]) - i = i + 1 - - return out_args - - -def init_config(args=None): - out_args = None - if args: - out_args = __parse_args(args) +def add_standard_options(parser): + parser.add_option("--realm", dest="realm", help="Override default IPA realm") + parser.add_option("--server", dest="server", help="Override default IPA server") + parser.add_option("--domain", dest="domain", help="Override default IPA DNS domain") + +def init_config(options=None): + if options: + config.default_realm = options.realm + config.default_domain = options.domain + if options.server: + config.default_server.extend(options.server.split(",")) __parse_config() __discover_config() - config.default_server = list(set(config.default_server)) + # make sure the server list only contains unique items + new_server = [] + for server in config.default_server: + if server not in new_server: + new_server.append(server) + config.default_server = new_server if not config.default_realm: raise IPAConfigError("IPA realm not found in DNS, in the config file (/etc/ipa/ipa.conf) or on the command line.") @@ -172,6 +176,3 @@ def init_config(args=None): raise IPAConfigError("IPA server not found in DNS, in the config file (/etc/ipa/ipa.conf) or on the command line.") if not config.default_domain: raise IPAConfigError("IPA domain not found in the config file (/etc/ipa/ipa.conf) or on the command line.") - - if out_args: - return out_args |