ansible - 按多个测试/条件过滤列表
问题描述
使用子网列表过滤 IP 地址列表以获取这些子网中存在的 IP 地址列表的 jinja 方法是什么?
一般来说,我想通过对每个对象应用多个测试来过滤一系列对象,并且只选择至少一个测试成功的对象。
以下是更多详细信息:
我有一个来自 ansible 事实的服务器 IP 地址列表:
"ansible_all_ipv4_addresses": [
"192.168.1.108",
"192.168.10.108",
"192.168.20.108",
"192.168.30.108"
]
我有一个 IP 子网列表,应该在其中启用服务(通过this获得):
"allowed_subnets": [
"192.168.1.0/24",
"192.168.5.0/24",
"192.168.10.0/24",
"192.168.30.0/24"
]
Ansible中还有一个ipaddr 过滤器,可用于过滤指定子网中包含的 IP 地址列表,如下所示:
# {{ test_list | ipaddr('192.0.0.0/8') }}
['192.24.2.1', '192.168.32.0/24']
我试过这个:
subnet_list:
- "192.168.1.1"
- "192.168.2.1"
- "192.168.3.1"
- "192.168.4.1"
- "192.168.5.1"
和
{{ subnet_list | ipaddr("192.168.1.0/23", "192.168.5.0/24") }}
但结果是空列表,因此我假设ipaddr
过滤器使用逻辑 AND。
解决方案
我相信这可能会让你开始寻找你想要的东西。
我创建了一个角色来测试您的要求。我在 vars/main.yml 中有以下内容:
---
my_ipv4_addresses: [
'192.168.1.108',
'192.168.10.108',
'192.168.20.108',
'192.168.30.108'
]
my_allowed_subnets: [
'192.168.1.0/24',
'192.168.5.0/24',
'192.168.10.0/24',
'192.168.30.0/24'
]
...
我有以下任务:
---
- name: "Get list of IPv4 only addresses within a given subnet"
debug: msg="For {{ item }}= {{ my_ipv4_addresses | ipv4(item) }}"
with_items: "{{ my_allowed_subnets }}"
...
它生成以下输出:
TASK [ipaddr : Get list of IPv4 only addresses within a given subnet] **********
ok: [localhost] => (item=None) => {
"msg": "For 192.168.1.0/24= [u'192.168.1.108']"
}
ok: [localhost] => (item=None) => {
"msg": "For 192.168.5.0/24= []"
}
ok: [localhost] => (item=None) => {
"msg": "For 192.168.10.0/24= [u'192.168.10.108']"
}
ok: [localhost] => (item=None) => {
"msg": "For 192.168.30.0/24= [u'192.168.30.108']"
}
所以,也许可以通过使用类似这个循环的东西来获得,或者从这个循环中生成一个列表。
希望这可以帮助。
推荐阅读
- glsl - 用 gls、lme 和 gam 拟合重复的单因素实验
- android - Android:如何在可绘制目录中搜索图像名称(=字符串)并将其显示在 ImageView 中?
- angular - Angular 6,根据所选值从 GET http 调用中获取过滤后的数据,无需管道
- reactjs - 错误 - Windows Powershell 中的未知监听 EADDRINUSE :::5432
- javascript - 纯 html 网站的页面转换?
- python - 字符串到单个字符的数组,而不沿途转换为列表
- java - 使用 jasync-sql 执行查询时出错:“无法运行查询,因为已经有一个查询待处理”
- go - 在多包中使用记录器/配置 Golang 生产的最佳实践
- javascript - 如何为 iview ui 多选添加限制?
- android - Android:将效果附加到 SoundPool 声音?