diff options
author | jctanner <tanner.jc@gmail.com> | 2017-11-22 11:19:43 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-22 11:19:43 -0500 |
commit | 218987eac1eb9a5671f996d2887dcca349199e51 (patch) | |
tree | f176d52fccdb7f3dfa03ebaf5b1662134c38382f | |
parent | aa42a2680eaedd40f70b82269677d0bfdf8120d6 (diff) | |
download | ansible-218987eac1eb9a5671f996d2887dcca349199e51.tar.gz |
ANSIBLE_SSH_USETTY configuration option (#33148)
* Allow the user to circumvent adding -tt on ssh commands to help aid in
debugging ssh related problems.
* Move config to the plugin
* Set version_added
* Change yaml section to "connection"
* Fix ssh unit tests
-rw-r--r-- | examples/ansible.cfg | 4 | ||||
-rw-r--r-- | lib/ansible/plugins/connection/ssh.py | 15 | ||||
-rw-r--r-- | test/units/plugins/connection/test_ssh.py | 8 |
3 files changed, 26 insertions, 1 deletions
diff --git a/examples/ansible.cfg b/examples/ansible.cfg index e1203999df..10983b4dc7 100644 --- a/examples/ansible.cfg +++ b/examples/ansible.cfg @@ -401,6 +401,10 @@ # only be disabled if your sftp version has problems with batch mode #sftp_batch_mode = False +# The -tt argument is passed to ssh when pipelining is not enabled because sudo +# requires a tty by default. +#use_tty = True + [persistent_connection] # Configures the persistent connection timeout value in seconds. This value is diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 6207e31a05..e3b7cfd6cf 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -185,6 +185,15 @@ DOCUMENTATION = ''' env: [{name: ANSIBLE_SCP_IF_SSH}] ini: - {key: scp_if_ssh, section: ssh_connection} + use_tty: + version_added: '2.5' + default: True + description: add -tt to ssh commands to force tty allocation + env: [{name: ANSIBLE_SSH_USETTY}] + ini: + - {key: usetty, section: ssh_connection} + type: boolean + yaml: {key: connection.usetty} ''' import errno @@ -957,7 +966,11 @@ class Connection(ConnectionBase): ssh_executable = self._play_context.ssh_executable - if not in_data and sudoable: + # -tt can cause various issues in some environments so allow the user + # to disable it as a troubleshooting method. + use_tty = self.get_option('use_tty') + + if not in_data and sudoable and use_tty: args = (ssh_executable, '-tt', self.host, cmd) else: args = (ssh_executable, self.host, cmd) diff --git a/test/units/plugins/connection/test_ssh.py b/test/units/plugins/connection/test_ssh.py index 2ca4d93a8e..0bb5c19cc5 100644 --- a/test/units/plugins/connection/test_ssh.py +++ b/test/units/plugins/connection/test_ssh.py @@ -80,6 +80,8 @@ class TestConnectionBaseClass(unittest.TestCase): conn._build_command.return_value = 'ssh something something' conn._run = MagicMock() conn._run.return_value = (0, 'stdout', 'stderr') + conn.get_option = MagicMock() + conn.get_option.return_value = True res, stdout, stderr = conn.exec_command('ssh') res, stdout, stderr = conn.exec_command('ssh', 'this is some data') @@ -538,6 +540,8 @@ class TestSSHConnectionRetries(object): self.conn._build_command = MagicMock() self.conn._build_command.return_value = 'ssh' + self.conn.get_option = MagicMock() + self.conn.get_option.return_value = True return_code, b_stdout, b_stderr = self.conn.exec_command('ssh', 'some data') assert return_code == 0 @@ -563,6 +567,8 @@ class TestSSHConnectionRetries(object): self.conn._build_command = MagicMock() self.conn._build_command.return_value = 'ssh' + self.conn.get_option = MagicMock() + self.conn.get_option.return_value = True pytest.raises(AnsibleConnectionFailure, self.conn.exec_command, 'ssh', 'some data') assert self.mock_popen.call_count == 10 @@ -575,6 +581,8 @@ class TestSSHConnectionRetries(object): self.conn._build_command = MagicMock() self.conn._build_command.return_value = 'ssh' + self.conn.get_option = MagicMock() + self.conn.get_option.return_value = True self.mock_popen.side_effect = [Exception('bad')] * 10 pytest.raises(Exception, self.conn.exec_command, 'ssh', 'some data') |