#azure #powershell #tags #azure-cli #jmespath
#azure #powershell #Теги #azure-cli #jmespath
Вопрос:
Всем доброго утра, счастливой пятницы!
Редактировать: в итоге я решил это сам во время отладки через него..
Думал, что я опубликую это здесь независимо от того, чтобы любой, кто приходит сюда, мог получить решение… Помогли документы Microsoft.
https://learn.microsoft.com/en-us/cli/azure/use-cli-effectively
Оригинальный вопрос
У меня есть ресурсы Azure, которые помечены как :
"tags":{
"Application Name":"The Best App",
"Budget Line":"Home project",
"Technology":"Best Tech",
"Environment":"Development",
"Project":"Learn"
}
Образец json с массивом ресурсов и тегов будет выглядеть следующим образом
[{"name":"Resource1",
"tags": {
"Application Name":"The Best App",
"Budget Line":"Home project",
"Technology":"Best Tech",
"Environment":"Development",
"Project":"Learn"
}},
{"name":"Resource2",
"tags": {
"Application Name":"The Best App",
"Budget Line":"Home project",
"Technology":"Best Tech",
"Environment":"Development",
"Project":"Learn"
}},
{"name":"Resource3",
"tags": {
"Application Name":"Not App",
"Budget Line":"Home project",
"Technology":"Best Tech",
"Environment":"Development",
"Project":"Learn"
}
}
]
Итак, теперь я хочу запросить все ресурсы Azure, где тег **Application Name** = **The Best App**.
Я просматривал учебное пособие по JMESpath и получил следующий синтаксис для работы на веб-сайте учебного пособия по JMESpath. Что я пытался сделать: отфильтровать ресурс на основе значения тега, а затем извлечь другое значение тега этих ресурсов.
[?tags."Application Name"==`"The Best App"`].tags."Budget Line"
Следующим шагом было попробовать тот же запрос как часть запроса azure cli с помощью запроса фильтра JMESpath.
Обратите внимание, что я использую azure cli из PowerShell, поскольку мне в нем удобнее, чем в Bash.
Не удается заставить его работать
Решение после нескольких проб и ошибок
Рассмотрим примеры powershell для экранирования двойных кавычек из https://learn.microsoft.com/en-us/cli/azure/use-cli-effectively Это сработало: примеры приведены в PowerShell
- Запрашивайте ресурс Azure на основе ключа тега, в котором нет пробела, но проецируйте / извлекайте значение тега, имеющего имя ключа с пробелом.
az resource list -g RESOURCEGROUPNAME --query "[?tags.Technology==`'Best Tech'`].tags.`"Budget Line`"" # Works in powershell
- Запрашивайте ресурс Azure на основе ключа тега, в котором есть пробел, и извлекайте / проецируйте значение тега, имеющего имя ключа с пробелом.
az resource list -g RESOURCEGROUPNAME --query "[?tags.`"Budget Line`"==`'Home Project'`].tags.`"Application Name`"" # Works in powershell
Счастливой пятницы, ребята! Надеюсь, это кому-то поможет!
Ответ №1:
Решение после нескольких проб и ошибок
Рассмотрим примеры powershell для экранирования двойных кавычек из https://learn.microsoft.com/en-us/cli/azure/use-cli-effectively Это сработало: примеры приведены в PowerShell
- Запрашивайте ресурс Azure на основе ключа тега, в котором нет пробела, но проецируйте / извлекайте значение тега, имеющего имя ключа с пробелом.
az resource list -g RESOURCEGROUPNAME --query "[?tags.Technology==`'Best Tech'`].tags.`"Budget Line`"" # Works in powershell
- Запрашивайте ресурс Azure на основе ключа тега, в котором есть пробел, и извлекайте / проецируйте значение тега, имеющего имя ключа с пробелом.
az resource list -g RESOURCEGROUPNAME --query "[?tags.`"Budget Line`"==`'Home Project'`].tags.`"Application Name`"" # Works in powershell
Счастливой пятницы, ребята! Надеюсь, это кому-то поможет!
Ответ №2:
Это совершенно другой контекст, но на всякий случай, если это кому-то поможет, решение автора не сработало для меня при выполнении запроса JSON из Ansible (который также использует JMESpath). Вместо этого мне пришлось сделать следующее:
storage_url: "{{ openstack_api_versions.stdout | from_json | json_query('[? "Service Type" == `object-store`].Endpoint') | first }}"
В этом контексте он работает только без обратных ссылок.