ansible测试远端机器端口联通性
- name: Check if ports are open
hosts: localhost
gather_facts: no
tasks:
- name: Wait for ports to become available
ansible.builtin.wait_for:
host: "{{ item[0] }}"
port: "{{ item[1] }}"
timeout: 5
loop: "{{ ips | product(ports) | list }}"
vars:
ips:
- 192.0.2.1
- 192.0.2.2
- 192.0.2.3
# 以此类推,包括所有的 IP 地址
ports:
- 5432
- 3306
ips | product(ports) | list:这部分是使用了 Jinja2 模板语言中的过滤器。首先,product(ports)会生成ips列表中的每个元素和ports列表中的每个元素的所有可能组合,这就创建了一个新的列表。然后,list过滤器将这个新生成的列表转换为一个 Ansible 可以处理的列表格式。loop::这是 Ansible 的一个关键字,用于指定一个列表,然后对列表中的每个项执行任务。在这个例子中,列表中的每个项都是ips和ports的一个组合,所以任务将对每个 IP 地址和端口组合进行操作。
综合上述,loop: "{{ ips | product(ports) | list }}" 这段代码的意思是:对 ips 和 ports 的所有可能组合进行迭代,然后对每个组合执行任务。如果你的任务是检查端口的可访问性,那么这段代码就会对每个 IP 地址和端口组合进行检查。
ansible.builtin.wait_for module – Waits for a condition before continuing — Ansible Documentation ansible文档
执行
ansible-playbook -i host port.yaml