我想打印来自azure.mgmt.compute库的ComputeManagementClient提供的所有信息。我打开了一个计算客户端,通过匹配名称找到了我的目标vm。但是,当我从我的调用函数(期望一个json格式的对象)返回此对象时,我收到此错误:
TypeError: <azure.mgmt.compute.models.virtual_machine.VirtualMachine object at 0x10c19b550> is not JSON serializable
当我从生成函数中打印一个对象时,得到如下结果:
{'os_profile': <azure.mgmt.compute.models.os_profile.OSProfile object
at 0x104966650>, 'storage_profile':
<azure.mgmt.compute.models.storage_profile.StorageProfile object at
0x104966710>, 'availability_set':
<azure.mgmt.compute.models.sub_resource.SubResource object at
0x104966850>, 'name': u'azure-test-1b', 'tags': {'cluster': u'server',
'name': u'azure-test-1b', 'service': u'server'},
'diagnostics_profile': None, 'vm_id': u'XXXX-XXXX-XXXX',
'hardware_profile':
<azure.mgmt.compute.models.hardware_profile.HardwareProfile object at
0x104966b90>, 'provisioning_state': u'Failed', 'network_profile':
<azure.mgmt.compute.models.network_profile.NetworkProfile object at
0x104966bd0>, 'plan': None, 'license_type': None, 'instance_view':
None, 'type': u'Microsoft.Compute/virtualMachines', 'id':
u'/subscriptions/XXXX-XXXX-XXXX/resourceGroups/YYY-YYYY-YYY/providers
/Microsoft.Compute/virtualMachines/azure-test-1b', 'resources': None,
'location': u'eastus2'}
这个结果看起来像一个json格式的对象,所以我不确定为什么它作为对象引用返回。我要求什么操作才能返回上述输出?第二个问题我如何扩展像自己引用对象的network_profile这样的值?有没有办法使用azure python sdks返回最完整的VM视图?
答案 0 :(得分:0)
问题1:我可以获得JSON
SDK将JSON反序列化为特定对象,您可以在ReadTheDocs上获得该对象的文档:http://azure-sdk-for-python.readthedocs.io/en/latest/
如果你真的需要JSON而不是对象,你有两个选择:
问题2:如何获取网络详细信息
您获取network_profile中返回的id,解析它并使用azure-mgmt-network包来获取详细信息。 There is no faster way currently.
问题3:如何获取有关VM的更多详细信息
VM对象使用“扩展”模式更精确(如仅在展开时可用的运行状态)。在您的通话中,请使用expand =“instanceView”(请参阅VM.get方法)
作为补充,如果有帮助,这是official sample for VM。
(我是MS的Azure SDK for Python的所有者)