由于python sdk针对vcenter的sdk查询返回的数据时以对象嵌套的形式,所以查询出来的数据JSON格式化,序列化以及存储到redis,mongo等数据库非常的不方便,因此本人耗费了一些时日将返回的常见的对象属性进行了json处理,可能比较low,但是简单粗暴,非常实用,还望诸君共勉。
目录
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# author:hanxiaoshun
# datetime:2020/6/27 20:12
# software: PyCharm
def detail_datastoreFolder(datastoreFolder):
datastoreFolder_tmp = {}
datastoreFolder_tmp['alarmActionsEnabled'] = datastoreFolder.alarmActionsEnabled
datastoreFolder_tmp['availableField'] = []
datastoreFolder_tmp['childEntity'] = []
datastoreFolder_tmp['childType'] = []
datastoreFolder_tmp['configIssue'] = []
datastoreFolder_tmp['configStatus'] = datastoreFolder.configStatus
datastoreFolder_tmp['customValue'] = []
datastoreFolder_tmp['declaredAlarmState'] = []
datastoreFolder_tmp['disabledMethod'] = []
datastoreFolder_tmp['effectiveRole'] = []
datastoreFolder_tmp['name'] = datastoreFolder.name
datastoreFolder_tmp['overallStatus'] = datastoreFolder.overallStatus
datastoreFolder_tmp['parent'] = {}
datastoreFolder_tmp['permission'] = []
datastoreFolder_tmp['recentTask'] = []
datastoreFolder_tmp['tag'] = []
datastoreFolder_tmp['triggeredAlarmState'] = []
datastoreFolder_tmp['value'] = []
return datastoreFolder_tmp
def detail_datacenter(datacenter=None):
datacenter_tmp = {}
datacenter_tmp['alarmActionsEnabled'] = datacenter.alarmActionsEnabled
datacenter_tmp['availableField'] = []
datacenter_tmp['configIssue'] = []
datacenter_tmp['configStatus'] = datacenter.configStatus
datacenter_tmp['configuration'] = {}
datacenter_tmp['configuration']['defaultHardwareVersionKey'] = datacenter.configuration.defaultHardwareVersionKey
datacenter_tmp['customValue'] = []
datastore_list = []
for datastore in datacenter.datastore:
datastore_tmp = {}
datastore_tmp['name'] = datastore.name
datastore_list.append(datastore_tmp)
datacenter_tmp['datastore'] = datastore_list
datacenter_tmp['datastoreFolder'] = detail_datastoreFolder(datacenter.datastoreFolder)
datacenter_tmp['declaredAlarmState'] = []
datacenter_tmp['disabledMethod'] = []
datacenter_tmp['effectiveRole'] = []
datacenter_tmp['hostFolder'] = {}
datacenter_tmp['name'] = datacenter.name
network_list = []
for network in datacenter.network:
network_tmp = {}
network_tmp['_moId'] = network._moId
network_tmp['name'] = network.name
network_list.append(network_tmp)
datacenter_tmp['network'] = network_list
datacenter_tmp['networkFolder'] = {}
datacenter_tmp['overallStatus'] = datacenter.overallStatus
datacenter_tmp['parent'] = {}
datacenter_tmp['permission'] = []
datacenter_tmp['recentTask'] = []
datacenter_tmp['tag'] = []
datacenter_tmp['triggeredAlarmState'] = {}
datacenter_tmp['value'] = []
datacenter_tmp['vmFolder'] = []
return datacenter_tmp
from cloudenforce.vmware_api.detail_datacenter import detail_datacenter
# -*- coding: utf-8 -*-
from pyvim import connect
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
import atexit
vcenter_address = 'vc22.xxxxxxx.xxxx'
service_instance = connect.SmartConnect(host=vcenter_address,
user='administrator@xxx.xxxx'
pwd='Pxxxxx',
port=443)
content = service_instance.RetrieveContent()
vcontent = service_instance.content
from cloudenforce.vmware_api.vcenter_mongo import insert_patch
if __name__ == '__main__':
data_list = []
for datacenter in vcontent.rootFolder.childEntity:
datacenter_ss = detail_datacenter(datacenter)
data_list.append(datacenter_ss)
print(data_list)
insert_patch(data_list, 'vcenter_datacenter'