Você pode tentar uma ação local nos hosts para verificar se é possível conectar-se às respectivas portas e registrar a que tiver êxito e definir isso como um fato. Você deseja desativar a coleta de fatos, pois, caso contrário, o módulo de instalação falhará ao tentar conectar-se aos hosts que já foram reconfigurados. Depois de fazer essa jogada, adicione outras pessoas abaixo com gather_facts e todo o resto.
- 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
Foi-me indicado que isso acabará com o tempo das cartilhas onde você usa isso. Você também pode definir ansible_ssh_port na seção vars de execuções que devem ser executadas apenas em hosts com porta ssh reconfigurada. por exemplo
- 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:
...