Ansible json_查询使用contains在另一个列表中搜索项目失败
我有样本列表,我想选择类型在通缉列表中的项目Ansible json_查询使用contains在另一个列表中搜索项目失败,ansible,jmespath,Ansible,Jmespath,我有样本列表,我想选择类型在通缉列表中的项目 - name: Get item based on anther list vars: samples: - { item: 10, type: sample-1 }, - { item: 20, type: sample-11 }, - { item: 30, type: sample-2 } wanted_list: [ sample-11, sample-2 ] query: &
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 },
- { item: 20, type: sample-11 },
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: "[?contains('{{wanted_list|to_json}}', type)]"
debug:
var: samples | json_query(query)
结果:
TASK: Get item based on anther list
ok: [localhost] => {
"samples|json_query(query)": [
{
"item": 10,
"type": "sample-1"
},
{
"item": 20,
"type": "sample-11"
},
{
"item": 30,
"type": "sample-2"
}
]
}
我所期望的是,它将只返回项目20和30。但它实际上返回了所有3个。看起来样本-1与列表项样本-11的一部分匹配
但根据JMESPath文档:
布尔包含(数组|字符串$subject,任意$search)
如果$subject是数组,则如果数组中的某个元素
等于提供的$search值
因此示例1不等于示例11,因此不应选择它。您将希望这样使用,因为
-name:根据其他列表获取项目
变量:
样品:
-{项目:10,类型:sample-1}
-{项目:20,类型:sample-11}
-{项目:30,类型:sample-2}
通缉名单:[样本11,样本2]
查询:“[?包含(`{wanted_list}to_json}}`,type)]”
调试:
msg:“{samples | json_query(query)}”
您将希望这样使用,因为
-name:根据其他列表获取项目
变量:
样品:
-{项目:10,类型:sample-1}
-{项目:20,类型:sample-11}
-{项目:30,类型:sample-2}
通缉名单:[样本11,样本2]
查询:“[?包含(`{wanted_list}to_json}}`,type)]”
调试:
msg:“{samples | json_query(query)}”
过滤器选择attr
和map
执行该操作
-调试:
msg:“{{样本|
selectattr('输入','输入',通缉名单)|
映射(attribute='item')|
列表}”
给予
注释
- 修正列表
示例的语法,并删除行尾的逗号
过滤器
selectattr
和map
执行该操作
-调试:
msg:“{{样本|
selectattr('输入','输入',通缉名单)|
映射(attribute='item')|
列表}”
给予
注释
- 修正列表
示例的语法,并删除行尾的逗号
"msg": [
20,
30
]
vars:
samples:
- {item: 10, type: sample-1}
- {item: 20, type: sample-11}
- {item: 30, type: sample-2}