Упражнение. Система запросов и информация о выполнении виртуальной машины
Теперь, когда мы создали виртуальную машину, мы можем получить сведения об этом с помощью других команд.
Начните с выполнения команды vm list
.
az vm list
Эта команда возвращает все виртуальные машины, определенные в этой подписке. С помощью параметра --resource-group
выполняется фильтрация выходных данных для определенной группы ресурсов.
Типы выходных данных
Обратите внимание, что для всех команд, которые мы рассмотрели, типом ответа по умолчанию является JSON. Он хорошо подходит для сценариев, но большинство пользователей считает его трудночитаемым. Флаг --output
позволяет изменить стиль выходных данных для любого типа ответа. Например, выполните следующую команду в Azure Cloud Shell, чтобы применить другой стиль выходных данных.
az vm list --output table
Вместе с table
можно указать json
(по умолчанию), jsonc
(выделенный цветом JSON) или tsv
(значения с разделением знаками табуляции). Попробуйте несколько вариантов с предыдущей командой, чтобы увидеть разницу.
Получение IP-адреса
Другая полезная команда: vm list-ip-addresses
список общедоступных и частных IP-адресов для виртуальной машины. Если адреса изменились или вы не записали их во время создания, эту команду можно выполнить в любое время.
az vm list-ip-addresses -n SampleVM -o table
Таким образом возвращаются следующие выходные данные:
VirtualMachine PublicIPAddresses PrivateIPAddresses
---------------- ------------------- --------------------
SampleVM 168.61.54.62 10.0.0.4
Совет
Обратите внимание, что для флага --output
-o
используется короткий синтаксис. Большинство параметров для команд Azure CLI можно сократить до одного дефиса и буквы. Например, можно сократить --name
до -n
и --resource-group
до -g
. Это удобно для ввода символов с клавиатуры, но в сценариях для ясности рекомендуется использовать полное имя параметра. Более подробные сведения о каждой команде см. в соответствующей документации.
Получение сведений о виртуальной машине
Выполнив команду vm show
, можно получить более подробные сведения о конкретной виртуальной машине по ее имени или идентификатору.
az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM
Это возвращает довольно большой блок JSON со всеми сведениями о виртуальной машине, включая подключенные устройства хранения, сетевые интерфейсы и все идентификаторы объектов для ресурсов, к которым подключена виртуальная машина. Опять же, можно изменить формат на табличный, но в этом случае будут пропущены все интересующие нас данные. Поэтому перейдем к языку встроенных запросов для JSON, который называется JMESPath.
Добавление фильтров в запросы с помощью JMESPath
JMESPath — это соответствующий отраслевым стандартам язык запросов, созданный на основе объектов JSON. Самым простым запросом является указание идентификатора, который выбирает ключ в объекте JSON.
Предположим, что есть объект:
{
"people": [
{
"name": "Fred",
"age": 28
},
{
"name": "Barney",
"age": 25
},
{
"name": "Wilma",
"age": 27
}
]
}
С помощью запроса people
можно вернуть массив значений для массива people
. Если нам нужен только один человек, можно использовать индексатор. Например, people[1]
возвращает:
{
"name": "Barney",
"age": 25
}
Мы также можем добавить определенные квалификаторы, которые возвратят подмножество объектов на основе определенных критериев. Например, при добавлении квалификатора people[?age > '25']
возвращается:
[
{
"name": "Fred",
"age": 28
},
{
"name": "Wilma",
"age": 27
}
]
Наконец, ограничим результаты, добавив select: people[?age > '25'].[name]
, возвращающий только имена:
[
[
"Fred"
],
[
"Wilma"
]
]
JMESQuery имеет ряд других интересных функций запросов. Если у вас есть время, изучите интерактивное руководство, доступное на сайте JMESPath.org.
Фильтрация запросов Azure CLI
С базовым пониманием запросов JMES мы можем добавлять фильтры в данные, возвращаемые запросами, такими как vm show
команда. Например, можно получить имя администратора.
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "osProfile.adminUsername"
Можно получить размер, назначенный виртуальной машине:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query hardwareProfile.vmSize
Кроме того, чтобы получить все идентификаторы сетевых интерфейсов, можно выполнить запрос:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id"
Этот метод запроса работает с любой командой Azure CLI, и ее можно использовать для извлечения определенных битов данных в командной строке. Это полезно для сценариев, а также. Например, вы можете извлечь значение из учетной записи Azure и сохранить его в среде или переменной скрипта. Если вы решили использовать его таким образом, полезно добавить параметр --output tsv
(который можно сократить до -o tsv
). Вы получите результаты, включающие только фактические значения данных с разделителями символом табуляции.
Например:
az vm show \
--resource-group "<rgn>[sandbox resource group name]</rgn>" \
--name SampleVM \
--query "networkProfile.networkInterfaces[].id" -o tsv
возвращается текст: /subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic