Merge branch 'slow_ssh' of git://github.com/lberruti/ansible into lberruti-slow_ssh

pull/5803/merge
James Tanner 11 years ago
commit fe091ec00d

@ -268,6 +268,7 @@ class Connection(object):
raise errors.AnsibleError('SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh') raise errors.AnsibleError('SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh')
while True: while True:
rfd, wfd, efd = select.select(rpipes, [], rpipes, 1) rfd, wfd, efd = select.select(rpipes, [], rpipes, 1)
process_over = p.poll() is not None
# fail early if the sudo/su password is wrong # fail early if the sudo/su password is wrong
if self.runner.sudo and sudoable and self.runner.sudo_pass: if self.runner.sudo and sudoable and self.runner.sudo_pass:
@ -283,22 +284,11 @@ class Connection(object):
raise errors.AnsibleError('Incorrect su password') raise errors.AnsibleError('Incorrect su password')
if p.stdout in rfd: if p.stdout in rfd:
dat = os.read(p.stdout.fileno(), 9000) stdout += os.read(p.stdout.fileno(), 9000)
stdout += dat
if dat == '':
rpipes.remove(p.stdout)
if p.stderr in rfd: if p.stderr in rfd:
dat = os.read(p.stderr.fileno(), 9000) stderr += os.read(p.stderr.fileno(), 9000)
stderr += dat if process_over:
if dat == '':
rpipes.remove(p.stderr)
# only break out if we've emptied the pipes, or there is nothing to
# read from and the process has finished.
if (not rpipes or not rfd) and p.poll() is not None:
break break
# Calling wait while there are still pipes to read can cause a lock
elif not rpipes and p.poll() == None:
p.wait()
stdin.close() # close stdin after we read from stdout (see also issue #848) stdin.close() # close stdin after we read from stdout (see also issue #848)
if C.HOST_KEY_CHECKING and not_in_host_file: if C.HOST_KEY_CHECKING and not_in_host_file:

@ -230,6 +230,7 @@ class Connection(object):
rpipes = [p.stdout, p.stderr] rpipes = [p.stdout, p.stderr]
while True: while True:
rfd, wfd, efd = select.select(rpipes, [], rpipes, 1) rfd, wfd, efd = select.select(rpipes, [], rpipes, 1)
process_over = p.poll() is not None
# fail early if the sudo/su password is wrong # fail early if the sudo/su password is wrong
if self.runner.sudo and sudoable and self.runner.sudo_pass: if self.runner.sudo and sudoable and self.runner.sudo_pass:
@ -245,22 +246,11 @@ class Connection(object):
raise errors.AnsibleError('Incorrect su password') raise errors.AnsibleError('Incorrect su password')
if p.stdout in rfd: if p.stdout in rfd:
dat = os.read(p.stdout.fileno(), 9000) stdout += os.read(p.stdout.fileno(), 9000)
stdout += dat
if dat == '':
rpipes.remove(p.stdout)
if p.stderr in rfd: if p.stderr in rfd:
dat = os.read(p.stderr.fileno(), 9000) stderr += os.read(p.stderr.fileno(), 9000)
stderr += dat if process_over:
if dat == '':
rpipes.remove(p.stderr)
# only break out if we've emptied the pipes, or there is nothing to
# read from and the process has finished.
if (not rpipes or not rfd) and p.poll() is not None:
break break
# Calling wait while there are still pipes to read can cause a lock
elif not rpipes and p.poll() == None:
p.wait()
stdin.close() # close stdin after we read from stdout (see also issue #848) stdin.close() # close stdin after we read from stdout (see also issue #848)
if C.HOST_KEY_CHECKING and not_in_host_file: if C.HOST_KEY_CHECKING and not_in_host_file:

Loading…
Cancel
Save