Replace IPAdmin.checkTask by replication.wait_for_task

The method was only used for waiting, not actual checking.

Part of the work for: https://fedorahosted.org/freeipa/ticket/2660
This commit is contained in:
Petr Viktorin
2013-01-21 07:23:20 -05:00
committed by Martin Kosek
parent b69f6983e4
commit 5271eb217c
3 changed files with 24 additions and 27 deletions

View File

@@ -466,7 +466,7 @@ class DsInstance(service.Service):
conn.simple_bind_s(DN(('cn', 'directory manager')), self.dm_password) conn.simple_bind_s(DN(('cn', 'directory manager')), self.dm_password)
else: else:
conn.do_sasl_gssapi_bind() conn.do_sasl_gssapi_bind()
conn.checkTask(dn, dowait=True) replication.wait_for_task(conn, dn)
conn.unbind() conn.unbind()
def apply_updates(self): def apply_updates(self):

View File

@@ -110,6 +110,27 @@ def enable_replication_version_checking(hostname, realm, dirman_passwd):
else: else:
conn.unbind() 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): class ReplicationManager(object):
"""Manage replication agreements between DS servers, and sync """Manage replication agreements between DS servers, and sync
agreements with Windows servers""" agreements with Windows servers"""
@@ -1206,7 +1227,7 @@ class ReplicationManager(object):
print "This may be safely interrupted with Ctrl+C" 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): def abortcleanallruv(self, replicaId):
""" """
@@ -1233,4 +1254,4 @@ class ReplicationManager(object):
print "This may be safely interrupted with Ctrl+C" print "This may be safely interrupted with Ctrl+C"
self.conn.checkTask(dn, dowait=True) wait_for_task(self.conn, dn)

View File

@@ -1770,30 +1770,6 @@ class IPAdmin(LDAPConnection):
return entry 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): def __getattr__(self, attrname):
# This makes IPAdmin classes look like IPASimpleLDAPObjects # This makes IPAdmin classes look like IPASimpleLDAPObjects
# FIXME: for backwards compatibility only # FIXME: for backwards compatibility only