คุณสามารถลอง local_action บนโฮสต์เพื่อดูว่าคุณสามารถเชื่อมต่อกับพอร์ตที่เกี่ยวข้องและลงทะเบียนพอร์ตที่ทำสำเร็จและตั้งค่าเป็นจริง คุณต้องการปิดการรวบรวมข้อเท็จจริงเพราะมิฉะนั้นโมดูลการติดตั้งจะล้มเหลวเมื่อพยายามเชื่อมต่อกับโฮสต์ที่มีการกำหนดค่าใหม่แล้ว เมื่อคุณเล่นเสร็จแล้วให้เพิ่มคนอื่น ๆ ด้านล่างด้วย gather_facts และส่วนที่เหลือทั้งหมด
- 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
มันชี้ให้ฉันเห็นว่านี่จะเป็นการระเบิดเวลาสำหรับ playbooks ที่คุณใช้สิ่งนี้ คุณยังสามารถตั้งค่า ansible_ssh_port ในส่วน vars ของการเล่นที่ควรรันบนโฮสต์ที่มีพอร์ต 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:
...