我正在尝试寻找带有Name
某个值标签的负载均衡器。
aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].LoadBalancerName'
我正在迭代结果并运行:
aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[?Tags[?Key==`Name`].Value == `my-desired-name-value`]'
即使这样,结果也总是空的:
aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[].Tags[?Key==`Name`].Value'
确实返回my-desired-name-value
。我想仅使用 JMESPath 获取标签的整个对象,但jq
在这里无法使用。
期望输出:
{
"TagDescriptions": [
{
"LoadBalancerName": "some-load-balancer",
"Tags": [
{
"Key": "SomeTag",
"Value": "SomeValue"
},
{
"Key": "Name",
"Value": "my-desired-name-value"
}
]
}
]
}
我的路径询问?
答案1
您正在尝试使用--query
来扮演的角色--filter
但不幸的describe-tags
是不支持该--filter
选项。
该--query
选项允许您选择响应中返回的字段。当可用时,--filter
您可以选择要返回的资源。它有更详细的描述这里
您可以使用它jq
来执行过滤器的功能。我强烈推荐它,因为 AWS 并未--filter
为所有 CLI 命令实现该选项。
对于你的例子,请尝试类似以下操作:
aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] |select (.Tags[].Value=="my-desired-name-value")'
稍微复杂一点的是根据标签键和值进行过滤:
aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] | . as $i \
| (select ($i.Tags[].Value=="my-desired-name-value")) and (select ($i.Tags[].Key=="Name")) \
| $i'
输出
{
"LoadBalancerName": "some-load-balancer",
"Tags": [
{
"Key": "Type",
"Value": "classic"
},
{
"Key": "Name",
"Value": "my-desired-name-value"
}
]
}
参考
答案2
aws elbv2 describe-tags --resource-arns | jq -r '.TagDescriptions[] | . 作为 $i | (选择($i.Tags[].Value | 测试(".-。-05-我的团队。-。"))) 和(选择 ($i.Tags[].Key=="Name")) | $i.ResourceArn'