Ensure that the become password is written on py3 in the ssh connection plugin. Fixes #34727

This commit is contained in:
Matt Martz 2018-01-18 09:28:25 -06:00 committed by Toshio Kuratomi
parent fb18338cdc
commit 29c1d5cb5d
2 changed files with 4 additions and 0 deletions

View file

@ -780,6 +780,9 @@ class Connection(ConnectionBase):
if self._flags['become_prompt']:
display.debug('Sending become_pass in response to prompt')
stdin.write(to_bytes(self._play_context.become_pass) + b'\n')
# On python3 stdin is a BufferedWriter, and we don't have a guarantee
# that the write will happen without a flush
stdin.flush()
self._flags['become_prompt'] = False
state += 1
elif self._flags['become_success']:

View file

@ -459,6 +459,7 @@ class TestSSHConnectionRun(object):
self.mock_selector.get_map.side_effect = lambda: True
return_code, b_stdout, b_stderr = self.conn._run("ssh", "this is input data")
self.mock_popen_res.stdin.flush.assert_called_once_with()
assert return_code == 0
assert b_stdout == b'abc'
assert b_stderr == b'123'