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

Ansible ipaddr过滤器不支持网段列表参数的解决方案

解决方案

ipaddr过滤器本身只支持传入单个CIDR网段做匹配,要适配多网段列表,直接遍历网段列表逐一匹配即可,只要命中任意一个网段就判定归属,不需要写自定义过滤器或者装额外插件。

直接改判断逻辑就行,你现在已经把生产网段改成列表了,下面的写法兼容单网段、多网段配置,后续QA、开发环境要加新网段直接往对应列表里追加就行,不用动判断代码:

vars:
  testip0: 10.160.30.20
  testip1: 10.190.2.25
  ip_range_live: [ 10.160.0.0/22, 10.190.0.0/22 ]
  ip_range_qa: [ 10.170.0.0/22 ]
  ip_range_devel: [ 10.180.0.0/22 ]

filter:
  datacenter: >-
    {% set target_ip = ansible_default_ipv4.address %}
    {% if ip_range_live | select('ipaddr', target_ip) %}live
    {% elif ip_range_qa | select('ipaddr', target_ip) %}qa
    {% elif ip_range_devel | select('ipaddr', target_ip) %}devel
    {% else %}INVALID{% endif %}

逻辑说明

  • select('ipaddr', target_ip)会遍历传入的网段列表,自动筛出和目标IP匹配的网段
  • Jinja2中空迭代对象会被判定为布尔假,只要存在匹配项,select返回的结果就为真,不需要额外统计结果长度
  • 写法完全兼容旧配置:如果某个环境暂时只有一个网段,变量值直接写字符串(比如ip_range_qa: 10.170.0.0/22)也能正常运行

踩坑提醒

你原来配置里的ip_range_qa: 10.170.0/22不是标准CIDR格式,缺了第四段的0,建议改成10.170.0.0/22,避免不同Ansible版本下出现匹配不准的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:33:18