Last active
January 19, 2024 21:12
-
-
Save triplepoint/1ad6c6060c0f12112403d98180bcf0b4 to your computer and use it in GitHub Desktop.
Ansible - fall back to a default ssh port if the configured ssh port fails
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
# This task list is intended to be imported by playbooks, before any | |
# other tasks are performed. It lets us determine whether the configured SSH | |
# port is available, and lets us fall back to the default port if necessary. | |
# | |
# The use case here is when a role in the playbook is configured to change the | |
# sshd port, but the first time the role is executed the host is still | |
# listening on the default port. With this check in place, we can fall back | |
# to the default port on the first run, and then on subsequent runs use the | |
# configured port. | |
# | |
# Be advised that running this task list in a `gather_facts: false` state as | |
# required means simple failures can go unexplained. For example, if python2 | |
# is not available, the `wait_for_connection` calls will just time out without | |
# explanation. | |
# | |
# Execute these tasks as the first thing in a playbook like so: | |
# - hosts: some-host-group | |
# gather_facts: false | |
# tasks: | |
# - import_tasks: _sshd_port_juggling.yml | |
- name: SSH Port Juggle | define the fallback default SSH port | |
set_fact: | |
_default_ssh_port: 22 | |
- name: SSH Port Juggle | Try configured ansible_port {{ ansible_port }} | |
wait_for_connection: | |
timeout: 10 | |
ignore_errors: true | |
register: _ssh_port_result | |
- name: SSH Port Juggle | Set the ansible_port to the fallback default port {{ _default_ssh_port }} | |
set_fact: | |
ansible_port: "{{ _default_ssh_port }}" | |
when: | |
- _ssh_port_result is failed | |
- name: SSH Port Juggle | Check fallback default port {{ ansible_port }} | |
wait_for_connection: | |
timeout: 10 | |
ignore_errors: true | |
register: _ssh_port_default_result | |
when: | |
- _ssh_port_result is failed | |
- name: SSH Port Juggle | Fail | |
fail: msg="Neither the configured ansible_port {{ ansible_port }} nor the fallback port {{ _default_ssh_port }} were reachable" | |
when: | |
- _ssh_port_result is failed | |
- _ssh_port_default_result is defined | |
- _ssh_port_default_result is failed |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment