如何使用 JMESPath 和 Ansible 正确过滤列表中的元素?
How do I filter elements from a list correctly with JMESPath and Ansible?
我有以下结构。
[
{
"ami_launch_index": 0,
"architecture": "x86_64",
"instance_type": "t2.micro",
"monitoring": {
"state": "disabled"
} ,
"placement": {
"availability_zone": "eu-central-1a",
"group_name": "",
"tenancy": "default"
},
"tags": {
"Name": "MYNAME 1",
"Project": "MY PROJECT",
"Purpose": "MYTEST"
},
"virtualization_type": "hvm"
},
{
"ami_launch_index": 2,
"architecture": "x86_64",
"instance_type": "t2.micro",
"monitoring": {
"state": "disabled"
},
"placement": {
"availability_zone": "eu-central-1a",
"group_name": "",
"tenancy": "default"
},
"tags": {
"Name": "MYNAME 2",
"Project": "MY SECOND PROJECT",
"Purpose": "WHY THE HECK NOT"
},
"virtualization_type": "hvm"
}
]
我想打印 [].tags.Name 包含字符串 "SECOND" 的所有元素(所以只是第二个元素。我该如何实现?
这是我试过的方法,但没有用。
- debug:
msg: "{{ instances.stdout | from_json | json_query(\"[][?contains(tags.Name, 'SECOND')]\") }}"
我尝试使用 http://jmespath.org,但也无法按照我想要的方式提取数据。
要获取在 tags.Name
中具有 SECOND
的项目,您可以使用此查询:
[?contains(tags.Name,'SECOND')]
但您的示例数据似乎不匹配任何内容,因为 SECOND
仅在 Project
属性 而不是 Name
.
我有以下结构。
[
{
"ami_launch_index": 0,
"architecture": "x86_64",
"instance_type": "t2.micro",
"monitoring": {
"state": "disabled"
} ,
"placement": {
"availability_zone": "eu-central-1a",
"group_name": "",
"tenancy": "default"
},
"tags": {
"Name": "MYNAME 1",
"Project": "MY PROJECT",
"Purpose": "MYTEST"
},
"virtualization_type": "hvm"
},
{
"ami_launch_index": 2,
"architecture": "x86_64",
"instance_type": "t2.micro",
"monitoring": {
"state": "disabled"
},
"placement": {
"availability_zone": "eu-central-1a",
"group_name": "",
"tenancy": "default"
},
"tags": {
"Name": "MYNAME 2",
"Project": "MY SECOND PROJECT",
"Purpose": "WHY THE HECK NOT"
},
"virtualization_type": "hvm"
}
]
我想打印 [].tags.Name 包含字符串 "SECOND" 的所有元素(所以只是第二个元素。我该如何实现?
这是我试过的方法,但没有用。
- debug:
msg: "{{ instances.stdout | from_json | json_query(\"[][?contains(tags.Name, 'SECOND')]\") }}"
我尝试使用 http://jmespath.org,但也无法按照我想要的方式提取数据。
要获取在 tags.Name
中具有 SECOND
的项目,您可以使用此查询:
[?contains(tags.Name,'SECOND')]
但您的示例数据似乎不匹配任何内容,因为 SECOND
仅在 Project
属性 而不是 Name
.