首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤地址匹配条件

过滤地址匹配条件
EN

Stack Overflow用户
提问于 2018-11-05 18:24:47
回答 1查看 1.4K关注 0票数 1

我想将允许的VLAN列表作为变量提供给我的服务器。

不可用的剧本应该能够过滤服务器的IP地址基于这个VLAN的。

  • 我有一个服务器上所有可用IP地址的列表(ansible_all_ipv4_addresses )
  • 我有一个全局变量my_subnets: my_subnets:- vlan: 2个子网:"192.168.2.0/24“网关:"192.168.2.10”- vlan: 3个子网:"192.168.3.0/24“dns:"192.168.3.12”- vlan: 4个子网:"192.168.4.0/24“- vlan: 5个子网:"192.168.5.0/24”
  • 我有每个服务变量allowed_vlans: allowed_vlans:-2-5

我正在寻找一种方法来模板化"192.168.2.0/24""192.168.5.0/24"

我在想:

1. Jinja方式

类似于从my_subnets项中提取与allowed_vlans匹配的项,并通过ipaddr()筛选器将它们与ansible_all_ipv4_addresses映射。

2. JSON查询方式

我试过:

代码语言:javascript
运行
复制
{{ my_subnets | json_query('[?vlan in allowed_vlans].subnet') }}

但是,json_query似乎没有使用python语法来计算是否存在数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 05:27:29

contains()函数是JMESPath检查成员资格的方式,但据我所知,它无法在对象树中向上引用,也不能像jq语言那样将表达式分配给内部变量。但是,可以欺骗并将表达式序列化为JSON,然后使用JMESPath的文字表达式语法:

代码语言:javascript
运行
复制
tasks:
- debug:
    verbosity: 0
    msg: |
      {{ my_subnets | json_query(jq) }}
  vars:
    # this "vars" trick was recommended by the json_query docs, but isn't required
    jq: |
      [? contains(`{{ allowed_subnets | to_json }}`, vlan) ].subnet
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53160078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档