Упражнение. Система запросов и информация о выполнении виртуальной машины

Завершено

Теперь, когда мы создали виртуальную машину, мы можем получить сведения об этом с помощью других команд.

Начните с выполнения команды 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