summaryrefslogtreecommitdiffstats
path: root/ipa-python
diff options
context:
space:
mode:
authorMartin Nagy <mnagy@redhat.com>2008-08-15 18:08:01 +0200
committerMartin Nagy <mnagy@redhat.com>2008-09-11 23:34:01 +0200
commit885103c32127d10250564e25c5895464fb366f9e (patch)
tree5db92cd0d4282b3e1aacbfc04c9d076a0d515bec /ipa-python
parent57669ba43224eee0d90556aeea03d14873b4bd7f (diff)
downloadfreeipa-885103c32127d10250564e25c5895464fb366f9e.tar.gz
freeipa-885103c32127d10250564e25c5895464fb366f9e.tar.xz
freeipa-885103c32127d10250564e25c5895464fb366f9e.zip
Rework config.py and change cli tools. Maintain order of IPA servers from command line, config and DNS. Parse options before detecting IPA configuration. Don't ignore rest of the options if one is missing in ipa.conf. Drop the --usage options, we will rely on --help. Fixes: 458869, 459070, 458980, 459234
Diffstat (limited to 'ipa-python')
-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