Puede probar una acción local en los hosts para ver si puede conectarse a los puertos respectivos y registrar el que tiene éxito y configurarlo como un hecho. Desea desactivar la recopilación de datos porque, de lo contrario, el módulo de configuración fallará cuando intente conectarse con los hosts que ya se han reconfigurado. Una vez que hayas hecho esta jugada, solo agrega otros a continuación con collect_facts y todo lo demás.
- name: determine ssh port
hosts: all
gather_facts: false
vars:
custom_ssh_port: 222
tasks:
- name: test default ssh port
local_action: wait_for port=22 timeout=5 host={{inventory_hostname}}
register: default_ssh
ignore_errors: true
- name: set ansible_ssh_port to default
set_fact: ansible_ssh_port=22
when: default_ssh.elapsed < 5
- name: test ssh on high port
local_action: wait_for port={{custom_ssh_port}} timeout=5 host={{inventory_hostname}}
register: high_ssh
when: default_ssh.elapsed >= 5
ignore_errors: true
- name: set ansible_ssh_port high
set_fact: ansible_ssh_port={{custom_ssh_port}}
when: default_ssh.elapsed >= 5 and high_ssh.elapsed < 5
Se me señaló que esto hará que se acabe el tiempo para los libros de jugadas donde usas esto. También puede establecer ansible_ssh_port en la sección vars de las reproducciones que solo se deben ejecutar en hosts con puerto ssh reconfigurado. p.ej
- name: change ssh ports
tasks:
- name: edit sshd_config
lineinfile ..
notify: restart ssh
handlers:
- name: restart ssh
service: sshd state=restarted
- name: continue setup
vars:
- ansible_ssh_port : 5422
tasks:
...