了解Azure计算管理资源并显示信息

时间:2016-12-21 20:37:41

标签: python azure

我想打印来自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视图?

1 个答案:

答案 0 :(得分:0)

问题1:我可以获得JSON

SDK将JSON反序列化为特定对象,您可以在ReadTheDocs上获得该对象的文档:http://azure-sdk-for-python.readthedocs.io/en/latest/

例如,VirtualMachine

如果你真的需要JSON而不是对象,你有两个选择:

  • 在通话中使用raw = True(请参阅VM.get documentation
  • 在azure-mgmt-resource包中使用通用resource.get。您将获得GenericResource个对象,一半使用“属性”进行解析,其中包含适用于您的对象的属性的字典。

问题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的所有者)