Я пытаюсь найти балансировщик нагрузки с 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"
}
]
}
]
}
Что не так с моим JMESPath запрос?
Вы пытаетесь использовать --query
выполнять роль --filter
и к сожалению describe-tags
не поддерживает --filter
вариант.
В --query
опция позволяет вам выбрать, какие поля будут возвращены в ответе. По мере доступности --filter
позволяет вам выбрать, какие ресурсы вы хотите вернуть. Это описано более подробно Вот
Ты можешь использовать jq
для выполнения функции фильтра. Я настоятельно рекомендую это, потому что AWS не реализует --filter
опция для всех команд интерфейса командной строки.
Для вашего примера попробуйте что-то вроде:
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"
}
]
}
Ссылки