Ви можете спробувати локальну перевірку на хостах, щоб побачити, чи можете ви підключитися до відповідних портів і зареєструвати той, що вдається, і встановити це як факт. Ви хочете вимкнути збір фактів, оскільки в іншому випадку модуль налаштування не вдасться, коли він намагається з'єднатися з хостами, які вже були налаштовані. Після того, як ви виконали цю гру, просто додайте інші нижче зі збиранням_фактів та всім іншим.
- 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
Мені вказували, що це вибухне час для ігор, де ви цим користуєтесь. Ви також можете встановити ansible_ssh_port у розділі відтворень, яке слід виконувати лише на хостах із перенастроєним портом ssh. напр
- 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:
...