ARM APIを使うSDK(Python、Java)などで仮想マシンの状態(InstanceView)を取得するのにハマったので備忘メモ。
前提として
そもそも、InstanceViewを取得するには以下のAPIを使います。
Get information about a virtual machine
二種類あって、以下がInstanceView取得用です。クエリではなく、URLにInstanceViewが埋め込まれてます。
https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Compute/virtualMachines/{vm-name}/InstanceView?api-version={api-version}
また、最近の言語向けSDKは自動生成なので、言語間でほぼ同じようなメソッド、クラスが用意されていますが、このInstanceViewを取得するメソッドが用意されていなくて、ソースみたんですけど、該当メソッドを見つけることはできませんでした。(同名で違うメソッドはいくつか見つかりますが。)
結論
というわけでPython SDKにIssueを挙げたのですが、要約すると、"expand=instanceview"というアンドキュメンテッドなクエリパラメータが用意されていて、それを前提としているような感じでした。なので、それを使えと。 試してみたところ、Python/Javaともに問題なく取得できました。
AutoRestでの議論 compute: spec missing for virtualmachines/{vm}/InstanceView · Issue #117 · Azure/azure-rest-api-specs · GitHub
Python SDKでの質問 Instance view of virtual machine · Issue #548 · Azure/azure-sdk-for-python · GitHub
同じことがJavaでも。 Autorest: unable to receive VM InstanceView · Issue #618 · Azure/azure-sdk-for-java · GitHub
まとめ
AutoRestの自動生成フレームワークだと、APIの設計によって多くの言語に影響がでちゃうのはしょうがないというか、少し懸念していたことが起きた感じがします。で、どこに質問していいかわからなくて、案外、既に議論されている内容だったりして。 地味にウォッチしておかないとだめですかね。