Bạn có thể thử local_action trên máy chủ để xem liệu bạn có thể kết nối với các cổng tương ứng hay không và đăng ký cổng thành công và đặt điều đó thành sự thật. Bạn muốn tắt thu thập dữ kiện vì nếu không mô-đun thiết lập sẽ thất bại khi nó cố gắng kết nối với các máy chủ đã được cấu hình lại. Khi bạn đã thực hiện trò chơi này, chỉ cần thêm những người khác bên dưới với tập hợp_facts và tất cả phần còn lại.
- 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
Nó đã được chỉ ra cho tôi rằng điều này sẽ thổi bay thời gian cho các vở kịch mà bạn sử dụng nó. Bạn cũng có thể đặt ansible_ssh_port trong phần vars của các lần phát chỉ nên chạy trên máy chủ có cổng ssh được cấu hình lại. ví dụ
- 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:
...