在Ansible中使用json_query/jmespath筛选器进行多个搜索
我试图在下面的json片段中解析出特定的子网名称,同时在json\u查询中使用contains\u with或start\u with过滤器。 它包含两个VNET,每个VNET都有多个子网:在Ansible中使用json_query/jmespath筛选器进行多个搜索,ansible,jmespath,Ansible,Jmespath,我试图在下面的json片段中解析出特定的子网名称,同时在json\u查询中使用contains\u with或start\u with过滤器。 它包含两个VNET,每个VNET都有多个子网: { "azure_virtualnetworks": [ { "name": "test-vnet-172-17-0-0-19", "properties": { "subnets": [ { "nam
{
"azure_virtualnetworks": [
{
"name": "test-vnet-172-17-0-0-19",
"properties": {
"subnets": [
{
"name": "test-confluent-subnet-172-17-0-0-28",
"properties": {
"addressPrefix": "172.20.88.0/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-confluent-rg/providers/Microsoft.Network/networkSecurityGroups/test-confluent-nsg"
},
"provisioningState": "Succeeded"
}
},
{
"name": "test-test-subnet-172-17-0-32-28",
"properties": {
"addressPrefix": "172.20.88.32/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-test-rg/providers/Microsoft.Network/networkSecurityGroups/test-test-nsg"
},
"provisioningState": "Succeeded"
}
}
]
}
},
{
"name": "test2-vnet-172-17-1-0-19",
"properties": {
"subnets": [
{
"name": "test-confluent-subnet-172-17-1-0-28",
"properties": {
"addressPrefix": "172.20.88.0/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-confluent-rg/providers/Microsoft.Network/networkSecurityGroups/test-confluent-nsg"
},
"provisioningState": "Succeeded"
}
},
{
"name": "test-qatesting-subnet-172-17-1-16-28",
"properties": {
"addressPrefix": "172.20.88.16/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-qatesting-rg/providers/Microsoft.Network/networkSecurityGroups/test-qatesting-nsg"
},
"provisioningState": "Succeeded"
}
}
]
}
}
]
}
我需要在按虚拟网络名称搜索后搜索子网名称
我可以过滤尽可能多的子网列表,没有问题。e、 g
azure_virtualnetworks[?contains(name,`test2-vnet`)].properties.subnets[]
返回:
[
{
"name": "test-confluent-subnet-172-17-1-0-28",
"properties": {
"addressPrefix": "172.20.88.0/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-confluent-rg/providers/Microsoft.Network/networkSecurityGroups/test-confluent-nsg"
},
"provisioningState": "Succeeded"
}
},
{
"name": "test-qatesting-subnet-172-17-1-16-28",
"properties": {
"addressPrefix": "172.20.88.16/28",
"networkSecurityGroup": {
"id": "/subscriptions/********/resourceGroups/test-qatesting-rg/providers/Microsoft.Network/networkSecurityGroups/test-qatesting-nsg"
},
"provisioningState": "Succeeded"
}
}
]
但是我在搜索子网时遇到了问题。我原以为下面的一些变化可能会奏效,但没有取得任何成功:
azure_virtualnetworks[?contains(name,`test2-vnet`)].properties.subnets[?contains(name,`test-confluent`) ]
我正在努力找出这里的正确语法。选择所需子网,使用表达式停止投影,从子网列表中筛选所需项目:
azure_virtualnetworks[?contains(name,`test2-vnet`)].properties.subnets[] | [?contains(name,`test-confluent`)]
实际上我已经试过了,但是有
子网
而不是子网[]
。为了完整性,我的最后一个查询是:azure_virtualnetworks[?包含(名称,
test2 vnet)].properties.subnets[?包含(名称,
test confluent)].name