
2000
正しい値を返す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'
これにより、次のようにシェル変数が式に渡さi
れます。jq
jq
変える $i
(これは文字列です)。鍵として使用できます[$i]
。
paste
@tsv
また、必要な2つの値を含む配列を使用することで、使用する必要もなくなりますjq
。これにより、コマンドと同様に、タブ区切りの出力が生成されますpaste
。
データを渡す必要もありませんpython -m json.tool
(利点が何であるかわかりません)。きれいな印刷用に使用する場合にはjq
。
見ているVMware API ドキュメント、特定のディスクに関する情報を取得する要求は次のとおりです。
https://{api_host}/api/vcenter/vm/{vm}/hardware/disk/{disk}
vm-22
これは、および/または代わりにVMの名前であり、ディスク識別子を使用する必要があると思います。{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'