Azure CLI的Query

时间:2023-03-09 09:11:18
Azure CLI的Query

Azure CLI 2.0是基于Python的命令行。其命令直观,使用非常方便。

其输出有四种模式:

--output -o : Output format. Allowed values: json, jsonc, table, tsv. Default: json.

其输出各种类型如下:

Table:

az vm list -o table
Name ResourceGroup Location
----------- --------------- ----------
hwmig01 HWMIGT-MIGRATED chinanorth
testfgnew01 TESTFG chinanorth
testfgnew02 TESTFG chinanorth
hwcisco CISCOROUTER chinaeast

TSV:

az vm list -o tsv
None None /subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/HWMIGT-MIGRATED/providers/Microsoft.Compute/virtualMachines/hwmig01 None None None chinanorth hwmig01 None None Succeeded HWMIGT-MIGRATED None None Microsoft.Compute/virtualMachines f8ff9972-32a6-421a--6d3759b9bb6c None
/subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/TESTFG/providers/Microsoft.Compute/virtualMachines/testfgnew01 None None None chinanorth testfgnew01 None None Succeeded TESTFG None Microsoft.Compute/virtualMachines 4a96f861-b4c0-4a5e-ba2b-af341c0fdb03 None
/subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/TESTFG/providers/Microsoft.Compute/virtualMachines/testfgnew02 None None None chinanorth testfgnew02 None None Succeeded TESTFG None Microsoft.Compute/virtualMachines a6f06ea8-ab6f--abcb-2cdfa7537304 None
/subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/CISCOROUTER/providers/Microsoft.Compute/virtualMachines/hwcisco None None None chinaeast hwcisco None Succeeded CISCOROUTER None Microsoft.Compute/virtualMachines 8f7d6ed0-8a95-49c4-bf1a-03a17127125b None

Json:

{
"availabilitySet": null,
"diagnosticsProfile": null,
"hardwareProfile": {
"vmSize": "Standard_A1"
},
"id": "/subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/HWMIGT-MIGRATED/providers/Microsoft.Compute/virtualMachines/hwmig01",
"identity": null,
"instanceView": null,
"licenseType": null,
"location": "chinanorth",
"name": "hwmig01",
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/42e8b20d-29ec-40a5-b020-b2229f3dda56/resourceGroups/hwmigt-Migrated/providers/Microsoft.Network/networkInterfaces/hwmig01-PrimaryNic",
"primary": true,
"resourceGroup": "hwmigt-Migrated"
}
]
},
"osProfile": null,
"plan": null,
"provisioningState": "Succeeded",
"resourceGroup": "HWMIGT-MIGRATED",
"resources": null,
"storageProfile": {
"dataDisks": [],
"imageReference": null,
"osDisk": {
"caching": "ReadWrite",
"createOption": "attach",
"diskSizeGb": null,
"encryptionSettings": null,
"image": null,
"managedDisk": null,
"name": "hwmig01-hwmig01-0-201709060415490504",
"osType": "Linux",
"vhd": {
"uri": "https://tbportalvhdss898wc2ldx4q.blob.core.chinacloudapi.cn/vhds/hwmig-hwmig01-2017-09-06.vhd"
}
}
},
"tags": null,
"type": "Microsoft.Compute/virtualMachines",
"vmId": "f8ff9972-32a6-421a-8911-6d3759b9bb6c",
"zones": null
}

Jsonc是有颜色的Json输出。

可以看到table和TSV的输出内容相对比较少,Json输出的内容最丰富,但要截取其中的内容只用grep、awk等各种工具非常不方便。

在Azure CLI中,已经支持了JMESPath query,通过JMESPath query可以精确的把Json的内容取出。

JQuery的官方网站是:

http://jmespath.org/

其使用方法如下:

1 筛选内容

比如,资源的类型:

az vm list --query [*].type
[
"Microsoft.Compute/virtualMachines",
"Microsoft.Compute/virtualMachines",
"Microsoft.Compute/virtualMachines",
"Microsoft.Compute/virtualMachines"
]

比如列出所有VM的名称:

az vm list --query [*].name
[
"hwmig01",
"testfgnew01",
"testfgnew02",
"hwcisco"
]

还可以层级的列出VM的存储信息中,系统盘的,OS系统

az vm list --query [*].storageProfile.osDisk.osType
[
"Linux",
"Linux",
"Linux",
"Linux"
]

可以多个内容同时选择:

az vm list --query [*].[name,type,storageProfile.osDisk.osType]
[
[
"hwmig01",
"Microsoft.Compute/virtualMachines",
"Linux"
],
[
"testfgnew01",
"Microsoft.Compute/virtualMachines",
"Linux"
],
[
"testfgnew02",
"Microsoft.Compute/virtualMachines",
"Linux"
],
[
"hwcisco",
"Microsoft.Compute/virtualMachines",
"Linux"
]
]

带标签的输出:

az vm list --query "[].{ VMName:name,OSType:storageProfile.osDisk.osType }"
[
{
"OSType": "Linux",
"VMName": "hwmig01"
},
{
"OSType": "Linux",
"VMName": "testfgnew01"
},
{
"OSType": "Linux",
"VMName": "testfgnew02"
},
{
"OSType": "Linux",
"VMName": "hwcisco"
}
]

2 条件查询

查出VM名称中包含hw的:

az vm list --query "[?contains(name,'hw')].{ VMName:name,OSType:storageProfile.osDisk.osType }"
[
{
"OSType": "Linux",
"VMName": "hwmig01"
},
{
"OSType": "Linux",
"VMName": "hwcisco"
}
]

查出运行状态的VM:

az vm list -d --query "[?contains(powerState,'running')].{Name:name,resourceGroup:resourceGroup}"
[
{
"Name": "hwmig01",
"resourceGroup": "HWMIGT-MIGRATED"
}
]

或者:

az vm list -d --query "[?(powerState == 'VM running')].{Name:name,resourceGroup:resourceGroup}"
[
{
"Name": "hwmig01",
"resourceGroup": "HWMIGT-MIGRATED"
}
]

查找出运行的VM,并关闭:

az vm list -d --query "[?(powerState == 'VM running')].{Name:name,resourceGroup:resourceGroup}" -o tsv | xargs -L1 bash -c 'az vm deallocat
e --name $ --resource-group $'
{
"endTime": "2017-09-30T09:03:21.617483+00:00",
"error": null,
"name": "a94b4d79-b291-46c8-8447-0768b6df2ebb",
"startTime": "2017-09-30T09:00:44.157134+00:00",
"status": "Succeeded"
}

总结:

在使用Azure CLI时,通过Query的选项,可以方便的对输出的Json进行过滤和选择。