diff options
-rw-r--r-- | ipaserver/install/dsinstance.py | 2 | ||||
-rw-r--r-- | ipaserver/install/replication.py | 25 | ||||
-rw-r--r-- | ipaserver/ipaldap.py | 24 |
3 files changed, 24 insertions, 27 deletions
diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py index 9eca4b50..8ee492c4 100644 --- a/ipaserver/install/dsinstance.py +++ b/ipaserver/install/dsinstance.py @@ -466,7 +466,7 @@ class DsInstance(service.Service): conn.simple_bind_s(DN(('cn', 'directory manager')), self.dm_password) else: conn.do_sasl_gssapi_bind() - conn.checkTask(dn, dowait=True) + replication.wait_for_task(conn, dn) conn.unbind() def apply_updates(self): diff --git a/ipaserver/install/replication.py b/ipaserver/install/replication.py index d604cf7b..eaf4c495 100644 --- a/ipaserver/install/replication.py +++ b/ipaserver/install/replication.py @@ -110,6 +110,27 @@ def enable_replication_version_checking(hostname, realm, dirman_passwd): else: conn.unbind() + +def wait_for_task(conn, dn): + """Check task status + + Task is complete when the nsTaskExitCode attr is set. + + :return: the task's return code + """ + assert isinstance(dn, DN) + attrlist = [ + 'nsTaskLog', 'nsTaskStatus', 'nsTaskExitCode', 'nsTaskCurrentItem', + 'nsTaskTotalItems'] + while True: + entry = conn.get_entry(dn, attrlist) + if entry.getValue('nsTaskExitCode'): + exit_code = int(entry.getValue('nsTaskExitCode')) + break + time.sleep(1) + return exit_code + + class ReplicationManager(object): """Manage replication agreements between DS servers, and sync agreements with Windows servers""" @@ -1206,7 +1227,7 @@ class ReplicationManager(object): print "This may be safely interrupted with Ctrl+C" - self.conn.checkTask(dn, dowait=True) + wait_for_task(self.conn, dn) def abortcleanallruv(self, replicaId): """ @@ -1233,4 +1254,4 @@ class ReplicationManager(object): print "This may be safely interrupted with Ctrl+C" - self.conn.checkTask(dn, dowait=True) + wait_for_task(self.conn, dn) diff --git a/ipaserver/ipaldap.py b/ipaserver/ipaldap.py index 7253bc1f..54498250 100644 --- a/ipaserver/ipaldap.py +++ b/ipaserver/ipaldap.py @@ -1770,30 +1770,6 @@ class IPAdmin(LDAPConnection): return entry - def checkTask(self, dn, dowait=False, verbose=False): - """check task status - task is complete when the nsTaskExitCode attr - is set return a 2 tuple (true/false,code) first is false if task is - running, true if done - if true, second is the exit code - if dowait - is True, this function will block until the task is complete - """ - assert isinstance(dn, DN) - attrlist = ['nsTaskLog', 'nsTaskStatus', 'nsTaskExitCode', 'nsTaskCurrentItem', 'nsTaskTotalItems'] - done = False - exitCode = 0 - while not done: - try: - entry = self.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)", attrlist) - except errors.NotFound: - break - if verbose: - print entry - if entry.getValue('nsTaskExitCode'): - exitCode = int(entry.getValue('nsTaskExitCode')) - done = True - if dowait: time.sleep(1) - else: break - return (done, exitCode) - def __getattr__(self, attrname): # This makes IPAdmin classes look like IPASimpleLDAPObjects # FIXME: for backwards compatibility only |