Rename the add command to connect, this makes it evident it is the
opposite of disconnect. add was also ambiguos, one could think it
could be used to add a new replica, while it can only add agreements
between existing replicas thus connecting them.
This patch also enhances a bit the parsing of arguments by
ipa-replica-manage
Simo.
--
Simo Sorce * Red Hat, Inc * New York
From 3e1e965c945fddc4ddae174ab9ce1d7275c52208 Mon Sep 17 00:00:00 2001
From: Simo Sorce sso...@redhat.com
Date: Tue, 14 Dec 2010 18:40:28 -0500
Subject: [PATCH 3/4] Rename add command to connect in ipa-replica-manage
This change also improves command syntax parsing
Fixes: https://fedorahosted.org/freeipa/ticket/623
---
install/tools/ipa-replica-manage | 106 +
1 files changed, 71 insertions(+), 35 deletions(-)
diff --git a/install/tools/ipa-replica-manage b/install/tools/ipa-replica-manage
index d0bc029575d81283b7864a60f5b754bec7f05757..f60f8a1498938ceb9bf09690856e0d2923cce287 100755
--- a/install/tools/ipa-replica-manage
+++ b/install/tools/ipa-replica-manage
@@ -28,6 +28,21 @@ from ipaserver.plugins.ldap2 import ldap2
from ipapython import version
from ipalib import errors, util
+# dict of command name and tuples of min/max num of args needed
+commands = {
+list:(0, 0, , ),
+connect:(1, 2, master fqdn [other master fqdn],
+must provide the name of the servers to connect),
+disconnect:(1, 2, master fqdn [other master fqdn],
+must provide the name of the server to disconnect),
+del:(1, 1, master fqdn,
+must provide hostname of master to delete),
+init:(1, 1, master fqdn,
+hostname of master to initialize is required),
+synch:(1, 1, master fqdn,
+must provide hostname of supplier to synchronize with)
+}
+
def parse_options():
from optparse import OptionParser
@@ -55,8 +70,27 @@ def parse_options():
options, args = parser.parse_args()
-if not len(args) or not (list in args[0] or add in args[0] or del in args[0] or init in args[0] or synch in args[0] or disconnect in args[0]):
-parser.error(must provide a command [list | add | del | init | synch | disconnect])
+valid_syntax = False
+
+if len(args):
+n = len(args) - 1
+k = commands.keys()
+for cmd in k:
+if cmd == args[0]:
+v = commands[cmd]
+err = None
+if n v[0]:
+err = v[3]
+elif n v[1]:
+err = too many arguments
+else:
+valid_syntax = True
+if err:
+parser.error(Invalid syntax: %s\nUsage: %s [options] %s % (err, cmd, v[2]))
+
+if not valid_syntax:
+cmdstr = | .join(commands.keys())
+parser.error(must provide a command [%s] % cmdstr)
# set log level
if options.verbose:
@@ -228,7 +262,8 @@ def del_master(replman, hostname, force=False):
print Failed to cleanup %s entries: %s % (hostname, str(e))
print You may need to manually remove them from the tree
-def add_master(replman, hostname, options):
+def add_link(replica1, replica2, dirman_passwd, options):
+
other_args = {}
if options.port:
other_args['port'] = options.port
@@ -247,22 +282,35 @@ def add_master(replman, hostname, options):
if not options.binddn or not options.bindpw or not options.cacert or not options.passsync:
logging.error(The arguments --binddn, --bindpw, --passsync and --cacert are required to create a winsync agreement)
sys.exit(1)
+
if options.cacert:
# have to install the given CA cert before doing anything else
ds = dsinstance.DsInstance(realm_name = get_realm_name(),
- dm_password = replman.dirman_passwd)
+ dm_password = dirman_passwd)
if not ds.add_ca_cert(options.cacert):
-logging.error(Could not load the required CA certificate file [%s] %
- options.cacert)
-sys.exit(1)
+print Could not load the required CA certificate file [%s] % options.cacert
+return
else:
-logging.info(Added CA certificate %s to certificate database for %s %
- (options.cacert, replman.hostname))
-# have to reconnect replman connection since the directory server was restarted
-replman = replication.ReplicationManager(replman.hostname, replman.dirman_passwd)
-logging.info(Restarted directory server + replman.hostname)
-replman.setup_replication(hostname, get_realm_name(), **other_args)
-logging.info(Added agreement for other host + hostname)
+print Added CA certificate %s to certificate database for %s % (options.cacert, replica1)
+
+# need to wait until cacert