JmesPath中如何与当前节点进行比较?
How to compare with the current node in JmesPath?
我有一个来自 Amazon AWS 的 JSON blob,描述了大量的负载均衡器。我想提取某个子网上所有负载均衡器的名称。我使用 Ansible,所以选择 JSON 位的语言是 JmesPath。你知道怎么做吗?
这是 JSON blob 的结构和我目前的尝试:
数据:
{
"LoadBalancerDescriptions": [
{
"want": "Yes!",
"Subnets": ["subnet-123456"],
"LoadBalancerName": "foo"
},
{
"want": "Yes!",
"Subnets": ["subnet-9876","subnet-123456"],
"LoadBalancerName": "bar"
},
{
"want": "No.",
"Subnets": ["subnet-123456"],
"LoadBalancerName": "batmobile"
}
]
}
尝试:
这里我使用的是golang命令行Jmespath客户端;相同的表达式应该在 Ansible 中工作:
cat ,elb--describe-load-balancers.json |\
jmespath "LoadBalancerDescriptions[?Subnets[?@='subnet-123456']].LoadBalancerName" |\
wc -l
到select Subnets
列表中具有subnet-123456
元素的所有节点并获取它们的名称:
LoadBalancerDescriptions[?contains(Subnets,'subnet-123456')].LoadBalancerName
我使用contains built-in函数作为过滤器。
我有一个来自 Amazon AWS 的 JSON blob,描述了大量的负载均衡器。我想提取某个子网上所有负载均衡器的名称。我使用 Ansible,所以选择 JSON 位的语言是 JmesPath。你知道怎么做吗?
这是 JSON blob 的结构和我目前的尝试:
数据:
{
"LoadBalancerDescriptions": [
{
"want": "Yes!",
"Subnets": ["subnet-123456"],
"LoadBalancerName": "foo"
},
{
"want": "Yes!",
"Subnets": ["subnet-9876","subnet-123456"],
"LoadBalancerName": "bar"
},
{
"want": "No.",
"Subnets": ["subnet-123456"],
"LoadBalancerName": "batmobile"
}
]
}
尝试:
这里我使用的是golang命令行Jmespath客户端;相同的表达式应该在 Ansible 中工作:
cat ,elb--describe-load-balancers.json |\
jmespath "LoadBalancerDescriptions[?Subnets[?@='subnet-123456']].LoadBalancerName" |\
wc -l
到select Subnets
列表中具有subnet-123456
元素的所有节点并获取它们的名称:
LoadBalancerDescriptions[?contains(Subnets,'subnet-123456')].LoadBalancerName
我使用contains built-in函数作为过滤器。