From 4a6161bab8d1fa960e3cc401108834d0b2c4ca0f Mon Sep 17 00:00:00 2001 From: james-jra Date: Fri, 25 May 2018 18:00:11 +0100 Subject: [PATCH] Create a new pipe for sshpass on final retry. Fixes #32238 (#39294) --- lib/ansible/plugins/connection/ssh.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 144de68040b..6db91eccd38 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -279,6 +279,11 @@ def _ssh_retry(func): # 255 = failure from the ssh command itself except (AnsibleControlPersistBrokenPipeError) as e: # Retry one more time because of the ControlPersist broken pipe (see #16731) + cmd = args[0] + if self._play_context.password and isinstance(cmd, list): + # This is a retry, so the fd/pipe for sshpass is closed, and we need a new one + self.sshpass_pipe = os.pipe() + cmd[1] = b'-d' + to_bytes(self.sshpass_pipe[0], nonstring='simplerepr', errors='surrogate_or_strict') display.vvv(u"RETRYING BECAUSE OF CONTROLPERSIST BROKEN PIPE") return_tuple = func(self, *args, **kwargs)