vcenter(8):Python3 SDK 查询返回数据JSON化并存入Mongodb,redis等数据库--datacenter

    技术2022-07-10  133

    由于python sdk针对vcenter的sdk查询返回的数据时以对象嵌套的形式,所以查询出来的数据JSON格式化,序列化以及存储到redis,mongo等数据库非常的不方便,因此本人耗费了一些时日将返回的常见的对象属性进行了json处理,可能比较low,但是简单粗暴,非常实用,还望诸君共勉。

    目录

    获取datacenter的json序列化


    #!/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'

     

    Processed: 0.010, SQL: 9