如果我提前知道相关标签的值,我如何捕获 VpcId?
How can I catch VpcId if I know a related tag's value ahead?
我有以下 aws ec2 describe-vpcs
的输出:
{
"Vpcs": [
{
"VpcId": "vpc-1f0e197d",
"InstanceTenancy": "default",
"Tags": [
{
"Value": "Product-Production",
"Key": "Name"
}
],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-f3c5509a",
"CidrBlock": "172.19.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"State": "available",
"DhcpOptionsId": "dopt-37fd5550",
"CidrBlock": "172.19.0.0/16",
"IsDefault": false
},
{
another vpc...
}
]
}
如果
我正在使用 jq
捕捉 "VpcId"
.Tags[].Value==Product-Production
但是无论我怎么尝试,我都无法得到正确的语法,如何实现?
你很接近但不是很正确的过滤器。你需要在这里使用一个select
表达式来匹配匹配你的字符串条件的对象并过滤掉它的值。
jq '.Vpcs[] | select( .Tags[].Value| contains("Product-Production")) | .VpcId'
如果你分解过滤器,
.Vpcs[]
部分列出了我们应用条件的数组中的所有元素。
- 我们过滤那个
.Value
包含您在这里需要的字符串的对象。因此,在第一个管道输出的末尾,您从数组中的元素列表中获取实际元素,匹配定义的条件。
- 从返回的对象中,您只需使用最后一个管道打印出
.VpcId
。
如果您以前没有使用过 jqplay.org,您应该尝试一下,让您的过滤器生效并在线解决。
我有以下 aws ec2 describe-vpcs
的输出:
{
"Vpcs": [
{
"VpcId": "vpc-1f0e197d",
"InstanceTenancy": "default",
"Tags": [
{
"Value": "Product-Production",
"Key": "Name"
}
],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-f3c5509a",
"CidrBlock": "172.19.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"State": "available",
"DhcpOptionsId": "dopt-37fd5550",
"CidrBlock": "172.19.0.0/16",
"IsDefault": false
},
{
another vpc...
}
]
}
如果
我正在使用jq
捕捉 "VpcId"
.Tags[].Value==Product-Production
但是无论我怎么尝试,我都无法得到正确的语法,如何实现?
你很接近但不是很正确的过滤器。你需要在这里使用一个select
表达式来匹配匹配你的字符串条件的对象并过滤掉它的值。
jq '.Vpcs[] | select( .Tags[].Value| contains("Product-Production")) | .VpcId'
如果你分解过滤器,
.Vpcs[]
部分列出了我们应用条件的数组中的所有元素。- 我们过滤那个
.Value
包含您在这里需要的字符串的对象。因此,在第一个管道输出的末尾,您从数组中的元素列表中获取实际元素,匹配定义的条件。 - 从返回的对象中,您只需使用最后一个管道打印出
.VpcId
。
如果您以前没有使用过 jqplay.org,您应该尝试一下,让您的过滤器生效并在线解决。