ansible测试远端机器端口联通性

594 阅读1分钟

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 的一个关键字,用于指定一个列表,然后对列表中的每个项执行任务。在这个例子中,列表中的每个项都是 ipsports 的一个组合,所以任务将对每个 IP 地址和端口组合进行操作。

综合上述,loop: "{{ ips | product(ports) | list }}" 这段代码的意思是:对 ipsports 的所有可能组合进行迭代,然后对每个组合执行任务。如果你的任务是检查端口的可访问性,那么这段代码就会对每个 IP 地址和端口组合进行检查。

ansible.builtin.wait_for module – Waits for a condition before continuing — Ansible Documentation ansible文档

执行

ansible-playbook -i host port.yaml