vcenter(8):Python3 SDK 查詢返回數據JSON化並存入Mongodb,redis等數據庫--datacenter

由於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='[email protected]'
                                        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'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章