From a3423094d815462eb3a8f36c9facd8889465dda5 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 4 May 2021 11:09:05 -0400 Subject: [PATCH] dont specify default for port, allow ssh/config (#74526) * dont specify default for port, allow ssh/config also added general note on how defaults work. Co-authored-by: Abhijeet Kasurde Co-authored-by: Sam Doran (cherry picked from commit 30912b6a47813940592bfcf7cb7d1d6e8d608da4) --- changelogs/fragments/ssh_port_default_fix.yml | 2 ++ lib/ansible/plugins/connection/ssh.py | 4 ++- .../connection_ssh/check_ssh_defaults.yml | 29 +++++++++++++++++++ .../files/port_overrride_ssh.cfg | 2 ++ .../targets/connection_ssh/runme.sh | 3 ++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/ssh_port_default_fix.yml create mode 100644 test/integration/targets/connection_ssh/check_ssh_defaults.yml create mode 100644 test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg diff --git a/changelogs/fragments/ssh_port_default_fix.yml b/changelogs/fragments/ssh_port_default_fix.yml new file mode 100644 index 00000000000000..1d45e60d2a13b2 --- /dev/null +++ b/changelogs/fragments/ssh_port_default_fix.yml @@ -0,0 +1,2 @@ +bugfixes: + - Remove 'default' from ssh plugin as we want to rely on default from ssh itself or ssh/config. diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 0af9ac73d7222d..02d776e14b72c0 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -19,6 +19,9 @@ extends_documentation_fragment: - connection_pipelining version_added: historical + notes: + - Many options default to 'None' here but that only means we don't override the ssh tool's defaults and/or configuration. + For example, if you specify the port in this plugin it will override any C(Port) entry in your C(.ssh/config). options: host: description: Hostname/ip to connect to. @@ -181,7 +184,6 @@ port: description: Remote port to connect to. type: int - default: 22 ini: - section: defaults key: remote_port diff --git a/test/integration/targets/connection_ssh/check_ssh_defaults.yml b/test/integration/targets/connection_ssh/check_ssh_defaults.yml new file mode 100644 index 00000000000000..937f1f7d44c645 --- /dev/null +++ b/test/integration/targets/connection_ssh/check_ssh_defaults.yml @@ -0,0 +1,29 @@ +- hosts: ssh + gather_facts: false + vars: + ansible_connection: ssh + ansible_ssh_timeout: 10 + tasks: + - name: contain the maddness + block: + - name: test all is good + ping: + + - name: start the fun + meta: reset_connection + + - name: now test we can use wrong port from ssh/config + ping: + ignore_unreachable: True + vars: + ansible_ssh_args: "-F {{playbook_dir}}/files/port_overrride_ssh.cfg" + register: expected + + - name: check all is as expected + assert: + that: + - expected['unreachable']|bool + - "'2222' in expected['msg']" + always: + - name: make sure we don't cache the bad connection + meta: reset_connection diff --git a/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg b/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg new file mode 100644 index 00000000000000..7f8422ec7cef2e --- /dev/null +++ b/test/integration/targets/connection_ssh/files/port_overrride_ssh.cfg @@ -0,0 +1,2 @@ +Host * + Port 2222 diff --git a/test/integration/targets/connection_ssh/runme.sh b/test/integration/targets/connection_ssh/runme.sh index 32dbdd937b6e37..7e5953edac80ff 100755 --- a/test/integration/targets/connection_ssh/runme.sh +++ b/test/integration/targets/connection_ssh/runme.sh @@ -65,3 +65,6 @@ fi ANSIBLE_SCP_IF_SSH=true ./posix.sh "$@" "${scp_args[@]}" # piped ANSIBLE_SSH_TRANSFER_METHOD=piped ./posix.sh "$@" + +# test config defaults override +ansible-playbook check_ssh_defaults.yml "$@" -i test_connection.inventory