我正在尝试找到一个带有具有Name某些价值的标签的负载均衡器。
aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].LoadBalancerName'
Run Code Online (Sandbox Code Playgroud)
我正在迭代结果并运行:
aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[?Tags[?Key==`Name`].Value == `my-desired-name-value`]'
Run Code Online (Sandbox Code Playgroud)
即使这样,结果始终为空:
aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[].Tags[?Key==`Name`].Value'
Run Code Online (Sandbox Code Playgroud)
确实返回my-desired-name-value。我想仅使用 JMESPath 获取标签的整个对象,我不能jq在这里使用。
期望的输出:
{
"TagDescriptions": [
{
"LoadBalancerName": "some-load-balancer",
"Tags": [
{
"Key": "SomeTag",
"Value": "SomeValue"
},
{
"Key": "Name",
"Value": "my-desired-name-value"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的JMESPath查询出了什么问题?
您正在尝试使用--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")'
Run Code Online (Sandbox Code Playgroud)
稍微复杂一点的是过滤标签键和值:
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'
Run Code Online (Sandbox Code Playgroud)
{
"LoadBalancerName": "some-load-balancer",
"Tags": [
{
"Key": "Type",
"Value": "classic"
},
{
"Key": "Name",
"Value": "my-desired-name-value"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |