2000
我有一个下面的curl,它传递jq 命令中的值,该命令返回正确的值......
curl -X GET \
-H 'vmware-api-session-id: <auth-id>' \
-k -s
'https://<url>/api/vcenter/vm/vm-22' | python -m json.tool | jq -r '.disks."2000" | .label, .capacity' | paste - -
Hard disk 1 52143587328
现在我有了2000
变量的这一部分。喜欢i=2000
和 jq 喜欢
jq -r '.disks."$i"
回报
null null
我无法弄清楚如何2000
通过变量传递它
答案1
jq -r --arg i "$i" '.disks[$i] | [ .label, .capacity ] | @tsv'
这会将 shell 变量传递i
到jq
表达式中,如下所示jq
多变的 $i
(这是一个字符串)。您可以使用它作为密钥[$i]
。
paste
我还通过使用@tsv
包含您想要的两个值的数组来消除使用的需要jq
。这将产生制表符分隔的输出,就像您的paste
命令一样。
您也不应该需要传递数据python -m json.tool
(我不知道这有什么好处)。如果它用于漂亮打印,则不需要输入到jq
.
看着VMware API 文档,获取有关特定磁盘的信息的请求如下所示
https://{api_host}/api/vcenter/vm/{vm}/hardware/disk/{disk}
这让我认为您应该使用和(或) 代替vm-22
,是您的虚拟机的名称,并且是您的磁盘标识符。{vm}
2000
"$i"
{disk}
vm-22
2000
这应该给你类似的东西
{
"backing": {
"type": "enum",
"vmdk_file": "string"
},
"capacity": 0,
"ide": {
"master": false,
"primary": false
},
"label": "string",
"sata": {
"bus": 0,
"unit": 0
},
"scsi": {
"bus": 0,
"unit": 0
},
"type": "enum"
}
作为回应。
您可以将标签和容量解析为制表符分隔列表,使用
jq -r '[ .label, .capacity ] | @tsv'