summaryrefslogtreecommitdiffstats
path: root/ipa-python/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipa-python/config.py')
-rw-r--r--ipa-python/config.py95
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