1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

govcのjsonオプションのフィールド名に破壊的変更が加わる(govmomi 0.31)

Posted at

TL; DR

  • フィールド名が PascalCase -> camelCase に変更
before
$ govc vm.info -json DC0_H0_VM0 | jq .VirtualMachines[].Self
{
  "Type": "VirtualMachine",
  "Value": "vm-55"
}
after
$ ./govc vm.info -json DC0_H0_VM0 | jq .virtualMachines[].Self
{
  "type": "VirtualMachine",
  "value": "vm-55"
}

はじめに

9/25にgovmomi 0.31が、そして間をおかず9/29に 0.32 が実装されました1。このリリースは影響範囲の広い破壊的変更を含みます。

破壊的変更:フィールド名がPascalCaseからcamelCaseに変更

冒頭の例の通り、vCenterレスポンスモデルをJSON化する際にフィールド名の先頭が大文字から小文字になりました。
これに伴い、govcの -json オプションによる出力結果が変わります。

0.30まで
$ govc version
govc 0.30.0
$ govc vm.info -json DC0_H0_VM0 | jq .VirtualMachines[].Self
{
  "Type": "VirtualMachine",
  "Value": "vm-55"
}
0.31以降
$ ./govc version
govc 0.32.0
# キーがcamelCaseになっている(jqのフィルタも変えていることに注意!)
$ ./govc vm.info -json DC0_H0_VM0 | jq .virtualMachines[].Self
{
  "type": "VirtualMachine",
  "value": "vm-55"
}

スクリプト等でgovcが出力しているJSONを使っていた場合、0.31以上に上げると動かなくなってしまいます

$ govc vm.info -json DC0_H0_VM0 | jq .VirtualMachines[].Self
jq: error (at <stdin>:494): Cannot iterate over null (null)

対応

上記のように、キーをcamelCaseに変えることで対応可能です。

しかし、スクリプト全体のフィールド名を逐一書き換えると手間がかかります。
別のアイデアとして、本記事ではjqで 「フィールド名をPascalCaseに戻すフィルタ」 を噛ませます。

$ ./govc vm.info -json DC0_H0_VM0 | jq 'walk(if type=="object" then with_entries(.key|=(.[0:1] | ascii_upcase) + .[1:]) else . end)' | jq '.Virtua
lMachines[].Self'
{
  "Type": "VirtualMachine",
  "Value": "vm-55"
}

フィルタ jq 'walk(if type=="object" then with_entries(.key|=(.[0:1] | ascii_upcase) + .[1:]) else . end)' で、キーの先頭を大文字にしています。

仕組みは以下の通りです。(jq の話なので使うだけであれば気にしなくてokです)

  • with_entries でオブジェクトの各キー、値に対しmap処理を適用
  • キーの一文字目だけ大文字化して自身に代入 ( |=)

  1. 0.31から1週間たたずに0.32がリリースされフィールド名変更範囲が追加されたため、改修は完了していないかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?