You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中实现IP网段与端口的全量配对?

Ansible实现网段内IP与端口全量配对问题

问题背景

给定变量格式如下:

vars:
    networks: 
      - source: 10.135.4.23/25
        ports:  
          - 80
          - 25

需求:遍历每个网段块下的所有端口,同时遍历该网段内的所有IP,实现每个IP与每个端口的全量配对。

已尝试的方法

方法1:仅生成网段内IP列表,无法关联端口

- name: Show network info
  set_fact:
    network_item: "{{ network_item|default([]) + [network | ansible.utils.nthhost(item)] }}"
  loop: "{{ query('sequence', 'start=0 end='+(network|ansible.utils.ipaddr('net')|ansible.utils.ipaddr('size')|string)) }}"

此方法仅能生成网段内的IP列表,但无法将IP与对应端口关联起来。

方法2:尝试用with_subelements关联IP和端口,执行报错

- name: Show network info
  set_fact:
    network_item: "{{ network_item|default([]) + [{'source': item.source | ansible.utils.nthhost(item), 'ports': item.ports}] }}"
  with_subelements:
    - "{{ networks }}"
    - "{{ query('sequence', 'start=0 end='+(source|ansible.utils.ipaddr('net')|ansible.utils.ipaddr('size')|string)) }}"

执行时触发错误:Unrecognized type <<class 'ansible.template.AnsibleUndefined'>> for ipaddr filter <value>

方法3:用with_subelements遍历网段与端口,但未遍历单个IP

- name: Loop over networks and ports
  debug:
    msg: "IP: {{ item.0 }} - Port: {{ item.1 }}"
  with_subelements:
    - "{{ networks }}"
    - ports

此方法仅能实现网段范围与端口的配对,无法遍历网段内的单个IP,达不到全量配对的要求。

疑问

能否像方法3那样,在with_subelements循环内加入方法1的网段IP遍历逻辑,实现IP与端口的全量配对?这在Ansible中是否可行?

内容的提问来源于stack exchange,提问作者Gerard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:20:19