如何在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
相关产品推荐
相关产品推荐

