Форматы выходных данных для команд 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