Форматы выходных данных для команд Azure CLI

Azure CLI использует JSON в качестве формата выходных данных по умолчанию, но поддерживает и другие форматы. Параметр --output (--out или -o) позволяет форматировать данные, выводимые CLI. Ниже описаны значения аргументов и их типы:

--output Description
json Строка в формате JSON. Это значение по умолчанию.
jsonc Выделенная цветом строка JSON.
table Таблица ASCII с ключами в качестве заголовков столбцов.
tsv Значения, разделенные табуляцией, без ключей.
yaml YAML, альтернативный JSON формат, понятный человеку.
yamlc Выделенная цветом строка YAML.
none Нет выходных данных, кроме сообщений об ошибках и предупреждений.

Предупреждение

Используйте выходной формат none или сохранить выходные данные команд в переменной, чтобы избежать предоставления секретов, таких как ключи API и учетные данные. Примечание. Некоторые среды CI/CD могут хранить выходные данные выполненных команд в журналах. Рекомендуется подтвердить, что записано в этих файлах журнала и у кого есть доступ к журналам. Дополнительные сведения см. в разделе "Нет выходного формата".

Формат выходных данных JSON (по умолчанию)

Следующий пример отображает список виртуальных машин в подписках в стандартном формате JSON.

az vm list --output json

Следующие выходные данные содержат некоторые поля, которые исключены для краткости, и замененные сведения для идентификации.

[
  {
    "availabilitySet": null,
    "diagnosticsProfile": null,
    "hardwareProfile": {
      "vmSize": "Standard_DS1"
    },
    "id": "/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010",
    "instanceView": null,
    "licenseType": null,
    "location": "westus",
    "name": "DemoVM010",
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/.../resourceGroups/demorg1/providers/Microsoft.Network/networkInterfaces/DemoVM010VMNic",
          "primary": null,
          "resourceGroup": "demorg1"
        }
      ]
    },
          ...
          ...
          ...
]

Формат выходных данных YAML

yamlВыходные данные отображаются в YAML, формате сериализации данных обычного текста. YAML легче для восприятия, чем JSON, и сопоставим с ним. Входные данные конфигурации некоторых приложений и команд CLI задаются в формате YAML, а не JSON.

az vm list --output yaml

Следующие выходные данные содержат некоторые поля, которые исключены для краткости, и замененные сведения для идентификации.

- availabilitySet: null
  diagnosticsProfile: null
  hardwareProfile:
    vmSize: Standard_DS1_v2
  id: /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010
  identity: null
  instanceView: null
  licenseType: null
  location: westus
  name: ExampleVM1
  networkProfile:
    networkInterfaces:
    - id: /subscriptions/.../resourceGroups/DemoRG1/providers/Microsoft.Network/networkInterfaces/DemoVM010Nic
      primary: null
      resourceGroup: DemoRG1
  ...
...

Формат табличных выходных данных

Формат table выводит данные в виде таблицы ASCII, упрощая чтение и сканирование данных. Вложенные объекты не включаются в таблицу с выходными данными, но их можно отфильтровать как часть запроса. Некоторые поля не включаются в таблицу, поэтому этот формат лучше всего подходит, когда вам нужно быстро получить обзор данных в наглядной форме.

az vm list --output table
Name         ResourceGroup    Location
-----------  ---------------  ----------
DemoVM010    DEMORG1          westus
demovm212    DEMORG1          westus
demovm213    DEMORG1          westus
KBDemo001VM  RGDEMO001        westus
KBDemo020    RGDEMO001        westus

Вы можете использовать параметр --query для настройки свойств и столбцов, которые будут отображаться в списке. Следующий пример показывает, как выбрать только имя виртуальной машины и имя группы ресурсов в команде list.

az vm list --query "[].{resource:resourceGroup, name:name}" --output table
Resource    Name
----------  -----------
DEMORG1     DemoVM010
DEMORG1     demovm212
DEMORG1     demovm213
RGDEMO001   KBDemo001VM
RGDEMO001   KBDemo020

Примечание.

Некоторые ключи по умолчанию не отображаются в табличном представлении. Доступны следующие параметры: id, type и etag. Если вам нужно отобразить их в выходных данных, вы можете использовать функцию повторного добавления ключа JMESPath, чтобы изменить имя ключа и избежать фильтрации.

az vm list --query "[].{objectID:id}" --output table

Дополнительные сведения об использовании запросов для фильтрации данных см. в руководстве по использованию запросов JMESPath в Azure CLI.

Формат выходных данных TSV

Формат tsv выходных данных возвращает значения табуляции и новые строки без дополнительного форматирования, ключей или других символов. Такой формат позволяет использовать выходные данные в других командах и инструментах, необходимых для обработки текста в определенной форме. Как и формат table, tsv не отображает вложенные объекты.

Если применить для предыдущего примера параметр tsv, отобразится результат в виде текста, разделенного табуляцией.

az vm list --output tsv
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    None    None    westus    DemoVM010            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    cbd56d9b-9340-44bc-a722-25f15b578444
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    None    None    westus    demovm212            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    4bdac85d-c2f7-410f-9907-ca7921d930b4
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    None    None    westus    demovm213            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    2131c664-221a-4b7f-9653-f6d542fbfa34
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM    None    None    westus    KBDemo001VM            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    14e74761-c17e-4530-a7be-9e4ff06ea74b
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020   None    None    westus    KBDemo020            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    36baa9-9b80-48a8-b4a9-854c7a858ece

Одним из ограничений формата вывода TSV является то, что порядок вывода не гарантируется. В интерфейсе командной строки порядок сохраняется за счет расположения ключей в алфавитном порядке в ответе JSON и последующем выводе их значений в том порядке, который соответствует выходным данным TSV. Не гарантируется, что заказ всегда идентичен, так как формат ответа службы Azure может измениться.

Чтобы обеспечить требуемый порядок, необходимо использовать параметр --query и формат списка из нескольких элементов. Если команда CLI возвращает один словарь JSON, используйте общий формат [key1, key2, ..., keyN] для обеспечения порядка ключей. Для команд CLI, возвращающих массив, используйте общий формат [].[key1, key2, ..., keyN] для упорядочивания значений столбцов.

Так, чтобы упорядочить приведенные выше сведения по идентификатору, расположению, группе ресурсов и имени виртуальной машины, сделайте следующее:

az vm list --output tsv --query '[].[id, location, resourceGroup, name]'
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    westus    DEMORG1    DemoVM010
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    westus    DEMORG1    demovm212
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    westus    DEMORG1    demovm213
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM     westus  RGDEMO001       KBDemo001VM
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020       westus  RGDEMO001       KBDemo020

На следующем примере показано, как выходные данные команды tsv можно передать по каналу в другие команды оболочки bash. Фильтрация выходных данных и принудительное упорядочивание выполняются с помощью запроса. Команда grep выбирает элементы, содержащие текст RGD, а затем команда cut выбирает четвертое поле, чтобы отобразить имя виртуальной машины в выходных данных.

az vm list --output tsv --query '[].[id, location, resourceGroup, name]' | grep RGD | cut -f4
KBDemo001VM
KBDemo020

Формат tsv выходных данных часто используется при назначении значений переменным. Этот пример получает идентификатор активной подписки и сохраняет его в переменной для использования в скрипте.

# Bash Script
subscriptionID=$(az account show --query id --output tsv)
echo "Using subscription ID $subscriptionID"

Дополнительные --query примеры параметров см. в статье "Запрос выходных данных команды Azure CLI".

Формат выходных данных отсутствует

Некоторые команды Azure CLI содержат выходные данные, которые необходимо защитить. Ниже приведены четыре примера:

  • Пароли
  • Строки подключения
  • секреты
  • клиентом

Чтобы защитить секреты и ключи при использовании команд Azure CLI, выберите один из следующих вариантов:

Вариант Преимущества Вариант использования
--output none формат выходных данных Хранит конфиденциальную информацию от отображения в консоли. Если команда завершается ошибкой, сообщения об ошибках по-прежнему будут получаться. 1. Используйте, когда выходные данные команды можно получить позже.
2. Используйте, если у вас нет необходимости в выходных данных.
3. Распространенный выбор при использовании управляемого удостоверения или субъекта-службы для управления ресурсами Azure.
--query параметр Сохраняет выходные данные в переменной. 1. Используйте, если выходные данные команды не могут быть получены позже.
2. Используйте, если необходимо использовать выходное значение команды в скрипте.

Использование none и получение сведений о безопасности в дальнейшем

Некоторые секреты Azure можно получить позже. Хорошим примером является секреты, хранящиеся в Azure Key Vault. В этом примере создайте секрет Azure Key Vault с помощью az keyvault secret set с параметром --output none . Вы можете получить секрет позже с помощью команды az keyvault secret show .

az keyvault secret set --name MySecretName \
                       --vault-name MyKeyVaultName \
                       --value MySecretValue\
                       --output none

Использование --query и возврат сведений о безопасности в переменную

Использование --query для хранения выходных данных в переменной технически не является форматом вывода. Это решение для защиты секретов и является альтернативой использованию --output none. Например, при сбросе учетных данных субъекта-службы пароль не может быть получен снова.

Сброс учетных данных субъекта-службы, возвращающих выходные данные в формате JSON по умолчанию:

# reset service principal credentials using default output format (json).
az ad sp credential reset --id myServicePrincipalID --output json

Выходные данные консоли с новым паролем в консоли.

{
  "appId": "myServicePrincipalID",
  "password": "myServicePrincipalNewPassword",
  "tenant": "myTenantID"
}

Лучшее решение заключается в возврате конфиденциальной информации в переменную.

# Bash Script
# reset service principal credentials returning results to a variable
myNewPassword=$(az ad sp credential reset --id myServicePrincipalID --query password --output tsv)

# Display the new password (remove this line in production for security)
echo "New password: $myNewPassword"

Дополнительные примеры хранения выходных данных в переменную см. в статье "Использование Azure CLI" — передача значений в другую команду. Дополнительные сведения о синтаксисе параметров см. в --query статье "Запрос выходных данных команды Azure CLI".

Настройка формата вывода по умолчанию

Команды Azure CLI предоставляют выходные данные, которые можно управлять двумя способами:

Элемент управления выходными данными Преимущества Практическое руководство
Глобальный параметр Выберите значение выходных данных по умолчанию, которое используется чаще всего, поэтому вам не нужно постоянно предоставлять параметр для каждой эталонной --output команды. Укажите формат выходных данных по умолчанию с помощью az config set.
Command, параметр Укажите выходные данные на уровне команды и предоставьте скриптам максимальную гибкость. Вы управляете выходными данными консоли и переменными для каждой ссылки. Переопределите параметр по умолчанию с помощью параметра ссылки --output .

Выходные данные по умолчанию для Azure CLI.json Задайте выходные данные по умолчанию, если выходные данные none консоли не нужны.

az config set core.output=none

Вы можете перезаписать выходные данные по умолчанию любой команды ссылки Azure CLI с помощью --output параметра. Ниже приведен скрипт команд, которые изменяют и тестируют выходные данные команд:

# set your default output to table
az config set core.output=table

# show your active subscription in table format
# notice how only a subset of properties are returned in the table
az account show

# override your table default and show your active subscription in jsonc format
az account show --output jsonc

# reset your default output to json
az config set core.output=json

См. также