def import_storage(ips): storage_dict = mult_ssh2_storage(ips) for i in storage_dict: storage_fact.append(i['storage_fact']) storage_lun_fact.append(i['storage_lun_fact']) import_time = datetime.datetime.now() logger.info("Storage数据开始比较!") try: update_storage_num = 0 add_storage_num = 0 for i in storage_fact: storage_temp = None for j in Storage_cmdb: if i[0]['Series_No'] and j['Series_No']: while i[0]['Series_No'].upper() == j['Series_No'].upper(): storage_temp = i[0]['Series_No'] if cmp(i[0], j) != 0: Storage_final.append({'Description': j['Description'], # 'Firmware': i['Firmware'], 'DevName': i[0]['DevName'], 'Series_No': i[0]['Series_No'], 'Ctlr_Frequency': i[0]['Ctlr_Frequency'], 'MANUFACTURE_Factory': i[0]['MANUFACTURE_Factory'], 'CI_modelid': i[0]['CI_modelid'], 'IP': i[0]['IP']}) j['status'] = 'O' Storage_excel.append(j) i[0]['status'] = 'A' Storage_excel.append(i[0]) update_storage_num += 1 break if storage_temp is None: Storage_final.append(i[0]) i[0]['status'] = 'A' Storage_excel.append(i[0]) add_storage_num += 1 logger.info("Storage数据比较结束!修改%d条,新增%d条", update_storage_num, add_storage_num) if update_flag: if update_storage_num != 0 or add_storage_num != 0: storage_dict = {"Storage": Storage_final} update_result = cmdbuild_api.put_update(token, json.dumps(storage_dict)) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) if excel_flag: if Storage_excel: excel(Storage_excel, 'Storage') except Exception, e: logger.error("Storage数据比较失败,报错内容:%s", e)
def import_TProcess(TProcessList, TProcess_cmdb_list): TProcess_final = [] TProcess_final_excel = [] update_TProcess_num = 0 add_TProcess_num = 0 logger.info("本币进程数据开始比较!") import_time = datetime.datetime.now() try: for i in TProcessList: if i['PRTYPE'] != '12': import_temp = None for j in TProcess_cmdb_list: if i['DisplayName'].strip().upper() == j['DisplayName'].strip().upper(): # 去掉CMDB中进程名的回车、空格等 import_temp = j['Description'] if i['DisplayName'] != j['DisplayName']: TProcess_final.append({'Description': j['Description'], 'DisplayName': i['DisplayName']}) if excel_flag: TProcess_final_excel.append({'Description': j['Description'], 'DisplayName': j['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'O'}) TProcess_final_excel.append({'Description': j['Description'], 'DisplayName': i['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'U'}) update_TProcess_num += 1 break if import_temp is None: add_TProcess_num += 1 TProcess_final.append({'Description': i['Description'], 'DisplayName': i['DisplayName']}) if excel_flag: TProcess_final_excel.append({'Description': i['Description'], 'DisplayName': i['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'A'}) logger.info("需要更新%d条,新增%d条!", update_TProcess_num, add_TProcess_num) if excel_flag: excel(TProcess_final_excel, 'TProcess_final') if update_flag: if update_TProcess_num != 0 or add_TProcess_num != 0: TProcess_dict = {"RuntimeProcess": TProcess_final} update_result = cmdbuild_api.put_update(token, json.dumps(TProcess_dict)) cost_time = cost(import_time) logger.info("更新数据成功! 耗时%d秒", cost_time) logger.info("cmdbuild平台更新返回结果:%s", update_result) else: cost_time = cost(import_time) logger.info("两边数据一致,无需更新! 耗时%d秒", cost_time) except Exception, e: logger.info("更新数据失败!原因:%s", e)
def get_cmdbuild_firberswitch_port(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台FC_Switch_Port数据开始采集!") try: firberswitch_port_cmdb_num = 0 fc_switch_port = cmdbuild_api.get_class(token, 'FC_Switch_Port', cards=True) for i in json.loads(fc_switch_port)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' firberswitch_port_cmdb.append({'Description': i['Description'], 'FCSwitch_Name': i['FCSwitch_Name'], 'Slot': i['Slot'], 'Port': i['Port'], 'Domain_Index': i['Domain_Index'], 'Speed': i['Speed'], 'FC_Switch_Port_State': i['FC_Switch_Port_State'], # 'Host_HBA': i['Host_HBA'], 'Host_HBA_WWPN': i['Host_HBA_WWPN']}) firberswitch_port_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("在cmdbuild系统上找到%d条FC_Switch_Port数据", firberswitch_port_cmdb_num) logger.info("cmdbuild平台FC_Switch_Port数据采集成功! 耗时%d秒", cost_time) return firberswitch_port_cmdb_num except Exception, e: logger.error("cmdbuild平台FC_Switch_Port数据采集失败! 原因:%s", e)
def get_cmdbuild_process_ip(TProcess_cmdb_list): process_ip_cmdb = {} process_ip_cmdb_num = 0 logger.info("cmdbuild本币进程与ip关系数据开始采集!") get_cmdbuild_time = datetime.datetime.now() try: process_ip_relation = json.loads(cmdbuild_api.get_domain(token, 'Process_RunsOn_IP'))['data'] for i in process_ip_relation: for k, v in i.items(): if k == '_destinationDescription': Description = i[k] for j in TProcess_cmdb_list: if Description == j['Description']: DisplayName = j['DisplayName'] break if k == '_sourceDescription': ip = i[k] try: process_ip_cmdb[Description] except KeyError: process_ip_cmdb[Description] = {} process_ip_cmdb[Description]['Description'] = Description process_ip_cmdb[Description]['DisplayName'] = DisplayName process_ip_cmdb[Description]['ips'] = [] process_ip_cmdb[Description]['ips'].append(ip) process_ip_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("cmdbuild本币进程和ip关系采集成功! 共%d条,耗时%d秒", process_ip_cmdb_num, cost_time) except Exception, e: logger.error("cmdbuild平台本币进程和ip关系采集失败! 原因:%s", e)
def get_cmdb_netdevice_interface(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild网络接口数据开始采集!") netdevice_interface_cmdb_num = 0 try: # 通过cmdbuild接口数据采集数据 # 'Description', 'Switch_Name', 'Port', 'Vlan', 'IP_Addr' switch_ports_netdevice = cmdbuild_api.get_class(token, 'Switch_Ports', cards=True) if switch_ports_netdevice: for i in json.loads(switch_ports_netdevice)['data']: netdevice_interface_cmdb_info = {'Description': i['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port']} if i['Vlan'] is None: netdevice_interface_cmdb_info['Vlan'] = '' else: netdevice_interface_cmdb_info['Vlan'] = i['Vlan'] if i['Use_Status'] is None: netdevice_interface_cmdb_info['Use_Status'] = '' else: netdevice_interface_cmdb_info['Use_Status'] = i['Use_Status'] netdevice_interface_cmdb.append(netdevice_interface_cmdb_info) netdevice_interface_cmdb_num += 1 # print netdevice_interface_cmdb excel(netdevice_interface_cmdb, 'netdevice_interface_cmdb') cost_cmdbuild_time = cost(get_cmdbuild_time) logger.info("cmdbuild网络接口数据采集成功! 采集%d条数据,耗时%d秒" % (netdevice_interface_cmdb_num, cost_cmdbuild_time)) except Exception, e: logger.error("cmdbuild网络接口数据采集失败! 原因:%s", e)
def get_cmdbuild_firberswitch(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台FC_Switch数据开始采集!") try: firberswitch_cmdb_num = 0 fc_switch = cmdbuild_api.get_class(token, 'FC_Switch', cards=True) for i in json.loads(fc_switch)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' # 存储设备-光纤交换机 if i['AppType'] == u'\u5149\u7ea4\u4ea4\u6362\u673a': firberswitch_cmdb.append({'Description': i['Description'], 'WWNN': i['WWNN'], # 'AppType': i['AppType'], 'DevName': i['DevName'], 'Series_No': i['Series_No'], 'Total_Ports': i['Total_Ports'], 'Ports_Enabled': i['Ports_Enabled'], 'Ports_Used': i['Ports_Used'], 'Speed_Support': i['Speed_Support'], # 'MANUFACTURE_Factory': i['MANUFACTURE_Factory'], # 'Speed_Support': i['Speed_Support'], # 'CI_modelid': i['CI_modelid'], 'Fabric_OS': i['Fabric_OS'], 'IP': i['IP']}) firberswitch_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("在cmdbuild系统上找到%d条FirberSwitch数据", firberswitch_cmdb_num) logger.info("cmdbuild平台FC_Switch数据采集成功! 耗时%d秒", cost_time) return firberswitch_cmdb_num except Exception, e: logger.error("cmdbuild平台FC_Switch数据采集失败! 原因:%s", e)
def get_cmdbuild_storage(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台Storage数据开始采集!") try: storage_cmdb_num = 0 Storage = cmdbuild_api.get_class(token, 'Storage', cards=True) for i in json.loads(Storage)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' Storage_cmdb.append({'Description': i['Description'], # 'Firmware': i['Firmware'], 'DevName': i['DevName'], 'Series_No': i['Series_No'], 'Ctlr_Frequency': i['Ctlr_Frequency'], 'MANUFACTURE_Factory': i['MANUFACTURE_Factory'], 'CI_modelid': i['CI_modelid'], 'IP': i['IP']}) storage_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("在cmdbuild系统上找到%d条storage数据", storage_cmdb_num) logger.info("cmdbuild平台Storage数据采集成功! 耗时%d秒", cost_time) return storage_cmdb_num except Exception, e: logger.error("cmdbuild平台Storage数据采集失败! 原因:%s", e)
def compare_lastpasswd(): import_time = datetime.datetime.now() logger.info("Host和OS关系数据开始比较!") try: update_lastpasswd_num = 0 add_lastpasswd_num = 0 if lastpasswd_cmdb: for k in lastpasswd_fact: if k: lastpasswd_temp = None for i in k: for j in lastpasswd_cmdb: if i and j: while i['Description'] == j['Description']: lastpasswd_temp = i['Description'] if cmp(i, j) != 0: lastpasswd_final.append(i) update_lastpasswd_num += 1 break if lastpasswd_temp is None: lastpasswd_final.append(i) add_lastpasswd_num += 1 else: for k in lastpasswd_fact: if k: for i in k: lastpasswd_final.append(i) add_lastpasswd_num += 1 logger.info("Host和OS关系数据比较结束!修改%d条数据,新增%d条数据" % (update_lastpasswd_num, add_lastpasswd_num)) if update_lastpasswd_num != 0 or add_lastpasswd_num != 0: lastpasswd_final_dict = {'LastPasswd': lastpasswd_final} print lastpasswd_final_dict if update_flag: result = cmdbuild_api.put_update(token, json.dumps(lastpasswd_final_dict)) logger.info("cmdbuild返回结果:" + result) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) # if excel_flag: # excel(lastpasswd_final_dict,lastpasswd_final) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) except Exception, e: logger.error("Host和OS关系数据比较失败,报错内容:%s", e)
def import_process_ip(process_ip_list, process_ip_cmdb_list): process_ip_final = [] process_ip_final_excel = [] update_process_ip_num = 0 add_process_ip_num = 0 logger.info("进程和IP关系数据开始更新!") import_time = datetime.datetime.now() try: for i in process_ip_list: import_temp = None for j in process_ip_cmdb_list: if i['DisplayName'].strip().upper() == j['DisplayName'].strip('*').upper(): # 去掉CMDB中进程名的回车、空格等 import_temp = i['DisplayName'] if i['IP'] not in j['ips']: process_ip_final.append({'进程': j['Description'], 'IP地址': i['IP']}) if excel_flag: process_ip_final_excel.append({'进程': j['Description'], 'IP地址': i['IP'], 'Status': 'U'}) update_process_ip_num += 1 break if import_temp is None: process_ip_final.append({'进程': i['Description'], 'IP地址': i['IP']}) if excel_flag: process_ip_final_excel.append({'进程': i['Description'], 'IP地址': i['IP'], 'Status': 'A'}) add_process_ip_num += 1 logger.info("需要更新%d条,新增%d条!", update_process_ip_num, add_process_ip_num) if excel_flag: excel(process_ip_final_excel, 'process_ip_final') if update_flag: if add_process_ip_num != 0: process_ip_dict = {"Process_RunsOn_IP": process_ip_final} update_result = cmdbuild_api.post_relation(token, json.dumps(process_ip_dict)) cost_os_time = cost(import_time) logger.info("更新数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致,无需更新! 耗时%d秒", cost_os_time) except Exception, e: logger.info("更新数据失败!原因:%s", e)
def get_h3c_netdevice(): get_h3c_time = datetime.datetime.now() logger.info("H3C平台网络设备数据开始采集!") try: device = json.loads(h3c_api.page(device_url)) netasset = json.loads(h3c_api.page(netasset_url)) for i in device['device']: for j in netasset['netAsset']: while i['symbolName'] == j['deviceName']: devicedetail_url = '/imcrs/plat/res/device/' + i['id'] + '' devicedetail = json.loads(h3c_api.page(devicedetail_url)) # 48x1GE, 4x10GE 属于板卡,非交换机 if not j['model'].__contains__('Fabric Extender Module: 48x1GE, 4x10GE'): netdevice_h3c_info = {'Description': i['symbolName'] + '-' + j['serialNum'], 'DevName': i['symbolName'], 'Manage_IP_Addr': i['ip'], 'Series_No': j['serialNum'], # 'CI_modelid': ' '.join(devicedetail['typeName'].split()[1:]), 'MANUFACTURE_Factory': transform( str(devicedetail['typeName'].split()[0])), 'OS_Bin': devicedetail['version']} # 当网络资产中有型号信息,对网络信息进行处理获取信息,如果缺失,采用设备信息 if j['model']: if j['model'].rstrip().__contains__(' '): # 型号中包含Series关键字,则到devicedetail中获取 if not j['model'].__contains__('Series'): netdevice_h3c_info['CI_modelid'] = ' '.join(j['model'].split()[1:]) else: netdevice_h3c_info['CI_modelid'] = ' '.join(devicedetail['typeName'].split()[1:]) else: netdevice_h3c_info['CI_modelid'] = j['model'] else: netdevice_h3c_info['CI_modelid'] = ' '.join(devicedetail['typeName'].split()[1:]) # 当系统版本不存在时,从系统描述中获取OS_Version if j['softVersion']: netdevice_h3c_info['OS_Version'] = j['softVersion'] else: if devicedetail['sysDescription'].__contains__('Version'): for k in devicedetail['sysDescription'].split(','): if k.__contains__('Version') and not k.__contains__('Inc. Device Manager'): netdevice_h3c_info['OS_Version'] = k.split('Version ')[-1].strip() netdevice_h3c.append(netdevice_h3c_info) break get_h3c_time = cost(get_h3c_time) logger.info("H3C平台网络设备数据采集成功! 耗时%d秒", get_h3c_time) except Exception, e: logger.error("H3C平台网络设备数据采集失败! 原因:%s", e)
def get_cmdbuild_TProcess(): TProcess_cmdb_list = [] TProcess_cmdb_num = 0 logger.info("cmdbuild本币进程数据开始采集!") get_cmdbuild_time = datetime.datetime.now() try: TProcess = cmdbuild_api.get_class(token, 'RuntimeProcess', cards=True) for i in json.loads(TProcess)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' TProcess_cmdb_list.append({'Description': i['Description'], 'DisplayName': i['DisplayName']}) TProcess_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("cmdbuild本币进程数据采集成功! 共%d条,耗时%d秒", TProcess_cmdb_num, cost_time) except Exception, e: logger.error("cmdbuild本币进程数据采集失败! 原因:%s", e)
def get_cmdbuild_lastpasswd(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台网络设备数据开始采集!") try: LastPasswd = cmdbuild_api.get_class(token, 'LastPasswd', cards=True) for i in json.loads(LastPasswd)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' lastpasswd_cmdb_info = { 'Description': i['Description'], 'HostName': i['HostName'], 'IP': i['IP'], 'UserName': i['UserName'], 'UpdateTime': i['UpdateTime'], 'Expired': i['Expired'] } lastpasswd_cmdb.append(lastpasswd_cmdb_info) cost_time = cost(get_cmdbuild_time) logger.info("lastpasswd数据采集成功! 耗时%d秒", cost_time) except Exception, e: logger.error("lastpasswd数据采集失败! 原因:%s", e)
def get_cmdbuild_netdevice(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台网络设备数据开始采集!") try: NetDevice = cmdbuild_api.get_class(token, 'NetDevice', cards=True) for i in json.loads(NetDevice)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' netdevice_cmdb_info = {'Description': i['Description'], 'DevName': i['DevName'], 'Manage_IP_Addr': i['Manage_IP_Addr'], 'Series_No': i['Series_No'], 'CI_modelid': i['CI_modelid'], 'MANUFACTURE_Factory': i['MANUFACTURE_Factory'], 'OS_Version': i['OS_Version'], 'OS_Bin': i['OS_Bin']} netdevice_cmdb.append(netdevice_cmdb_info) cost_time = cost(get_cmdbuild_time) logger.info("cmdbuild平台网络设备数据采集成功! 耗时%d秒", cost_time) except Exception, e: logger.error("cmdbuild平台网络设备数据采集失败! 原因:%s", e)
def get_cmdbuild_storage_lun(): get_cmdbuild_time = datetime.datetime.now() logger.info("cmdbuild平台lunmapping数据开始采集!") try: storage_lun_cmdb_num = 0 Storage = cmdbuild_api.get_class(token, 'Storage_Lun_Mapping', cards=True) for i in json.loads(Storage)['data']: for k, v in i.items(): if i[k] is None: i[k] = u'' Storage_lun_cmdb.append({'Description': i['Description'], 'LUN_Name': i['LUN_Name'], 'Lun_Size': i['Lun_Size'], 'Storage_Name': i['Storage_Name']}) storage_lun_cmdb_num += 1 cost_time = cost(get_cmdbuild_time) logger.info("在cmdbuild系统上找到%d条lunmapping数据", storage_lun_cmdb_num) logger.info("cmdbuild平台lunmapping数据采集成功! 耗时%d秒", cost_time) return storage_lun_cmdb_num except Exception, e: logger.error("cmdbuild平台lunmapping数据采集失败! 原因:%s", e)
if storage_lun_temp is None: Storage_lun_final.append(i[k]) i[k]['status'] = 'A' Storage_lun_excel.append(i[k]) add_storage_lun_num += 1 logger.info("Storage_Lun_Mapping数据比较结束!修改%d条,新增%d条", update_storage_lun_num, add_storage_lun_num) if update_flag: if update_storage_lun_num != 0 or add_storage_lun_num != 0: storage_lun_dict = {"Storage_Lun_Mapping": Storage_lun_final} # print storage_lun_dict update_result = cmdbuild_api.put_update( token, json.dumps(storage_lun_dict)) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) if excel_flag: if Storage_lun_excel: excel(Storage_lun_excel, 'Storage_lun') except Exception, e: logger.error("Storage_Lun_Mapping数据比较失败,报错内容:%s", e) if __name__ == '__main__': token = cmdbuild_api.get_token()
def import_firberswitch(ips): firberswitch_dict = mult_ssh2_fiberswitch(ips) for i in firberswitch_dict: firberswitch_fact.append(i['firberswitch_fact']) firberswitch_port_fact.append(i['firberswitch_port_fact']) try: import_time = datetime.datetime.now() logger.info("FirberSwitch数据开始比较!") update_firberswitch_num = 0 add_firberswitch_num = 0 # print firberswitch_fact for i in firberswitch_fact: firberswitch_temp = None for j in firberswitch_cmdb: if i['Series_No'] and j['Series_No']: while i['Series_No'].upper() == j['Series_No'].upper(): firberswitch_temp = i['Series_No'] if cmp(i, j) != 0: firberswitch_final.append({'Description': i['Description'], 'WWNN': i['WWNN'], # 'AppType': i['AppType'], 'DevName': i['DevName'], 'Series_No': i['Series_No'], 'Total_Ports': i['Total_Ports'], 'Ports_Enabled': i['Ports_Enabled'], 'Ports_Used': i['Ports_Used'], 'Speed_Support': i['Speed_Support'], # 'MANUFACTURE_Factory': i['MANUFACTURE_Factory'], # 'Speed_Support': i['Speed_Support'], # 'CI_modelid': i['CI_modelid'], 'Fabric_OS': i['Fabric_OS'], 'IP': i['IP']}) j['status'] = 'O' firberswitch_excel.append(j) i['status'] = 'U' firberswitch_excel.append(i) update_firberswitch_num += 1 break if firberswitch_temp is None: firberswitch_final.append(i) i['status'] = 'A' firberswitch_excel.append(i) add_firberswitch_num += 1 logger.info("FirberSwitch数据比较结束!修改%d条,新增%d条", update_firberswitch_num, add_firberswitch_num) if update_flag: if update_firberswitch_num != 0 or add_firberswitch_num != 0: firberswitch_dict = {"FC_Switch": firberswitch_final} update_result = cmdbuild_api.put_update(token, json.dumps(firberswitch_dict)) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) if excel_flag: if firberswitch_excel: excel(firberswitch_excel, 'FC_Switch') except Exception, e: logger.error("FirberSwitch数据比较失败,报错内容:%s", e)
update_firberswitch_port_num += 1 break if firberswitch_port_temp is None: firberswitch_port_final.append(i[k]) i[k]['status'] = 'A' firberswitch_port_excel.append(i[k]) add_firberswitch_port_num += 1 logger.info("FirberSwitch_Port数据比较结束!修改%d条,新增%d条", update_firberswitch_port_num, add_firberswitch_port_num) if update_flag: if update_firberswitch_port_num != 0 or add_firberswitch_port_num != 0: firberswitch_port_dict = {"FC_Switch_Port": firberswitch_port_final} update_result = cmdbuild_api.put_update(token, json.dumps(firberswitch_port_dict)) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) if excel_flag: if firberswitch_port_excel: excel(firberswitch_port_excel, 'FC_Switch_Port') except Exception, e: logger.error("FirberSwitch_Port数据比较失败,报错内容:%s", e) if __name__ == '__main__':
def get_h3c_netdevice_interface(): get_h3c_time = datetime.datetime.now() logger.info("H3C平台网络接口数据开始采集!") try: netdevice_interface_h3c_num = 0 for i in device['device']: # 循环获取接口、trunk、access信息 interface_url = '/imcrs/plat/res/device/' + i[ 'id'] + '/interface?size=1000' trunk_url = '/imcrs/vlan/trunk?devId=' + i['id'] + '&size=1000' access_url = '/imcrs/vlan/access?devId=' + i['id'] + '&size=1000' interface = json.loads(h3c_api.page(interface_url)) trunk = json.loads(h3c_api.page(trunk_url)) access = json.loads(h3c_api.page(access_url)) # 判断接口与trunk、access口的ifIndex是否相同,添加Vlan信息 # 输出主机名、端口号、vlan、对端ip、主机名+序列号、mac地址、状态 if interface != {}: for x in interface['interface']: if trunk: interface1 = None if str(trunk['trunkIf']).count('ifIndex') > 1: for y in trunk['trunkIf']: while y['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k[ 'deviceName']: if x['ifDescription'].count( '/') > 1: r = x['ifDescription'].replace( '-', '' ).split('/')[0].strip( filter( str.isalpha, str(x['ifDescription']) )) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if r == s: interface1 = i[ 'symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '1' }) else: if not (k['desc'].__contains__( 'Nexus2248 Chassis' ) or k['desc'].__contains__( 'Nexus2348TP Chassis') ): interface1 = i[ 'symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '2' }) break break elif str(trunk['trunkIf']).count('ifIndex') == 1: while y['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k['deviceName']: interface1 = i['symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '3' }) break break if access: interface2 = None if interface1 is None: if str(access['accessIf']).count('ifIndex') > 1: for z in access['accessIf']: while z['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k[ 'deviceName']: if x['ifDescription'].count( '/') > 1: r = x['ifDescription'].replace( '-', '' ).split('/')[0].strip( filter( str.isalpha, str(x[ 'ifDescription'] ))) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if int(r) < 100: if r == s: interface2 = i[ 'symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '4' }) else: interface2 = i[ 'symbolName'] # 当relPos>100时,序列号为主机,端口号为FEX型 if int(k['relPos'] ) == 1: interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '5' }) else: if not (k['desc'].__contains__( 'Nexus2248 Chassis' ) or k['desc'].__contains__( 'Nexus2348TP Chassis' )): interface2 = i[ 'symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '6' }) break break elif str(access['accessIf']).count('ifIndex') == 1: while z['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k[ 'deviceName']: interface2 = i['symbolName'] interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '7' }) break break if interface1 is None and interface2 is None: for k in netasset['netAsset']: if i['symbolName'] == k['deviceName']: if x['ifDescription'].count('/') > 1: r = x['ifDescription'].replace( '-', '').split('/')[0].strip( filter(str.isalpha, str(x['ifDescription']))) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if r == s: interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '8' }) # todo:华为交换机 S5720-52X-PWR-SI-AC 单台有机柜号,目前规则不符合,此为定制 elif k['name'].__contains__('S5720'): interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '9' }) else: # 不包含 Nexus2248 Chassis型号 if not (k['name'].__contains__( 'Nexus2248 Chassis') and k['name'].__contains__( 'Nexus2348TP Chassis')): interface_vlan.append({ 'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '10' }) # 过滤非物理接口 for i in interface_vlan: interface_port = i['Port'].lower() if interface_port.__contains__('ethernet') \ or interface_port.__contains__('fastethernet') \ or interface_port.__contains__('gigabitethernet') \ or interface_port.__contains__('flex'): netdevice_interface_h3c_info = { 'Description': i['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'] } if i['Use_Status'] == u'Up': netdevice_interface_h3c_info['Use_Status'] = u'已使用' else: netdevice_interface_h3c_info['Use_Status'] = u'未使用' netdevice_interface_h3c.append(netdevice_interface_h3c_info) netdevice_interface_h3c_num += 1 excel(netdevice_interface_h3c, 'netdevice_interface_h3c') cost_h3c_time = cost(get_h3c_time) logger.info("H3C平台网络接口数据采集成功! 采集%d条数据,耗时%d秒" % (netdevice_interface_h3c_num, cost_h3c_time)) except Exception, e: logger.error("H3C平台网络接口数据采集失败! 原因:%s", e)
def import_netdevice_interface(): logger.info("网络接口数据开始比较!") try: update_netdevice_interface_num = 0 add_netdevice_interface_num = 0 if netdevice_interface_cmdb and netdevice_interface_h3c: for i in netdevice_interface_h3c: compare_temp = None for j in netdevice_interface_cmdb: # 机器名和端口相同时 # ethernet、fastethernet、gigabitethernet输出值 if i['Switch_Name'] and j['Switch_Name']: while i['Switch_Name'].upper( ) == j['Switch_Name'].upper() and i['Port'] == restore( str(j['Port'])): compare_temp = i['Description'] if i['Port'] and i['Port'] != 'FastEthernet0' and i[ 'Port'] != 'FastEthernet1': if cmp(i, j) != 0: netdevice_interface_final_info = { 'Description': j['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'Use_Status': i['Use_Status'] } if j['Use_Status'] == u'待下线': netdevice_interface_final_info[ 'Use_Status'] = j['Use_Status'] if cmp(netdevice_interface_final_info, j): netdevice_interface_final.append( netdevice_interface_final_info) else: netdevice_interface_final_info[ 'Use_Status'] = i['Use_Status'] netdevice_interface_final.append( netdevice_interface_final_info) update_netdevice_interface_num += 1 if excel_flag: netdevice_interface_final_info_old = { 'Description': j['Description'], 'Switch_Name': j['Switch_Name'], 'Port': j['Port'], 'Vlan': j['Vlan'], 'Use_Status': j['Use_Status'], 'status': 'O' } # print netdevice_interface_final_info_old netdevice_interface_final_info_update = { 'Description': j['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'status': 'U' } if j['Use_Status'] == u'待下线': netdevice_interface_final_info_update[ 'Use_Status'] = j['Use_Status'] if cmp( netdevice_interface_final_info, j): netdevice_interface_final_excel.append( netdevice_interface_final_info_old ) netdevice_interface_final_excel.append( netdevice_interface_final_info_update ) else: netdevice_interface_final_info_update[ 'Use_Status'] = i['Use_Status'] netdevice_interface_final_excel.append( netdevice_interface_final_info_old ) netdevice_interface_final_excel.append( netdevice_interface_final_info_update ) # print netdevice_interface_final_info_update break # 如果无法匹配,新增数据 # ethernet、fastethernet、gigabitethernet输出值 if compare_temp is None: if i['Port'] and i['Port'] != 'FastEthernet0' and i[ 'Port'] != 'FastEthernet1': netdevice_interface_final.append(i) add_netdevice_interface_num += 1 if excel_flag: netdevice_interface_final_info_add = { 'Description': i['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'Use_Status': i['Use_Status'], 'status': 'A' } netdevice_interface_final_excel.append( netdevice_interface_final_info_add) logger.info("需要更新%d条,新增%d条", update_netdevice_interface_num, add_netdevice_interface_num) if excel_flag: if netdevice_interface_final_excel: excel(netdevice_interface_final_excel, 'netdevice_interface') if update_flag: import_time = datetime.datetime.now() if update_netdevice_interface_num != 0 or add_netdevice_interface_num != 0: netdevice_dict = { "Switch_Ports": netdevice_interface_final } # print json.dumps(netdevice_dict) logger.info("开始导入数据") update_result = cmdbuild_api.put_update( token, json.dumps(netdevice_dict)) cost_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_time) elif not netdevice_interface_h3c: logger.info("H3C平台采集无数据!") elif not netdevice_interface_cmdb: logger.info("cmdbuild平台采集无数据!") except Exception, e: logger.error("导入数据失败! 原因:%s", e)
def get_h3c_netdevice_interface(): get_h3c_time = datetime.datetime.now() logger.info("H3C平台网络接口数据开始采集!") try: netdevice_interface_h3c_num = 0 for i in device['device']: # 循环获取接口、trunk、access信息 interface_url = '/imcrs/plat/res/device/' + i['id'] + '/interface?size=1000' trunk_url = '/imcrs/vlan/trunk?devId=' + i['id'] + '&size=1000' access_url = '/imcrs/vlan/access?devId=' + i['id'] + '&size=1000' interface = json.loads(h3c_api.page(interface_url)) trunk = json.loads(h3c_api.page(trunk_url)) access = json.loads(h3c_api.page(access_url)) # 判断接口与trunk、access口的ifIndex是否相同,添加Vlan信息 # 输出主机名、端口号、vlan、对端ip、主机名+序列号、mac地址、状态 if interface != {}: for x in interface['interface']: if trunk: interface1 = None if str(trunk['trunkIf']).count('ifIndex') > 1: for y in trunk['trunkIf']: while y['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k['deviceName']: if x['ifDescription'].count('/') > 1: r = x['ifDescription'].replace('-', '').split('/')[0].strip( filter(str.isalpha, str(x['ifDescription']))) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if r == s: interface1 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '1'}) else: if not (k['desc'].__contains__('Nexus2248 Chassis') or k['desc'].__contains__('Nexus2348TP Chassis')): interface1 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '2'}) break break elif str(trunk['trunkIf']).count('ifIndex') == 1: while y['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k['deviceName']: interface1 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': y['allowedVlans'], 'Use_Status': x['statusDesc'], 'code': '3'}) break break if access: interface2 = None if interface1 is None: if str(access['accessIf']).count('ifIndex') > 1: for z in access['accessIf']: while z['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k['deviceName']: if x['ifDescription'].count('/') > 1: r = x['ifDescription'].replace('-', '').split('/')[0].strip( filter(str.isalpha, str(x['ifDescription']))) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if int(r) < 100: if r == s: interface2 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x[ 'ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '4'}) else: interface2 = i['symbolName'] # 当relPos>100时,序列号为主机,端口号为FEX型 if int(k['relPos']) == 1: interface_vlan.append( {'Description': i['symbolName'] + '_' + x[ 'ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '5'}) else: if not (k['desc'].__contains__('Nexus2248 Chassis') or k['desc'].__contains__('Nexus2348TP Chassis')): interface2 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x[ 'ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '6'}) break break elif str(access['accessIf']).count('ifIndex') == 1: while z['ifIndex'] == x['ifIndex']: for k in netasset['netAsset']: while i['symbolName'] == k['deviceName']: interface2 = i['symbolName'] interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': z['pvid'], 'Use_Status': x['statusDesc'], 'code': '7' }) break break if interface1 is None and interface2 is None: for k in netasset['netAsset']: if i['symbolName'] == k['deviceName']: if x['ifDescription'].count('/') > 1: r = x['ifDescription'].replace('-', '').split('/')[0].strip( filter(str.isalpha, str(x['ifDescription']))) if k['name'].isdigit(): s = k['name'] else: s = k['relPos'] if r == s: interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '8'}) # todo:华为交换机 S5720-52X-PWR-SI-AC 单台有机柜号,目前规则不符合,此为定制 elif k['name'].__contains__('S5720'): interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '9'}) else: # 不包含 Nexus2248 Chassis型号 if not (k['name'].__contains__('Nexus2248 Chassis') and k['name'].__contains__('Nexus2348TP Chassis')): interface_vlan.append( {'Description': i['symbolName'] + '_' + x['ifDescription'], 'Switch_Name': i['symbolName'] + '-' + k['serialNum'], 'Port': x['ifDescription'], 'Vlan': '', 'Use_Status': x['statusDesc'], 'code': '10'}) # 过滤非物理接口 for i in interface_vlan: interface_port = i['Port'].lower() if interface_port.__contains__('ethernet') \ or interface_port.__contains__('fastethernet') \ or interface_port.__contains__('gigabitethernet') \ or interface_port.__contains__('flex'): netdevice_interface_h3c_info = {'Description': i['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan']} if i['Use_Status'] == u'Up': netdevice_interface_h3c_info['Use_Status'] = u'已使用' else: netdevice_interface_h3c_info['Use_Status'] = u'未使用' netdevice_interface_h3c.append(netdevice_interface_h3c_info) netdevice_interface_h3c_num += 1 excel(netdevice_interface_h3c, 'netdevice_interface_h3c') cost_h3c_time = cost(get_h3c_time) logger.info("H3C平台网络接口数据采集成功! 采集%d条数据,耗时%d秒" % (netdevice_interface_h3c_num, cost_h3c_time)) except Exception, e: logger.error("H3C平台网络接口数据采集失败! 原因:%s", e)
def import_netdevice(): import_netdevice_time = datetime.datetime.now() logger.info("网络设备数据开始比较!") update_netdevice_num = 0 add_netdevice_num = 0 try: if netdevice_h3c and netdevice_cmdb: for i in netdevice_h3c: import_temp = None for j in netdevice_cmdb: if j['DevName'] and i['Series_No'] and j['Series_No']: while i['Series_No'].upper() == j['Series_No'].upper(): import_temp = i['Series_No'] if cmp(i, j) != 0: netdevice_final.append( {'Description': j['Description'], 'DevName': i['DevName'], 'Manage_IP_Addr': i['Manage_IP_Addr'], 'Series_No': i['Series_No'], 'CI_modelid': i['CI_modelid'], 'MANUFACTURE_Factory': i['MANUFACTURE_Factory'], 'OS_Version': i['OS_Version'], 'OS_Bin': i['OS_Bin']}) if excel_flag: netdevice_final_excel.append({'Description': j['Description'], 'DevName': j['DevName'], 'Manage_IP_Addr': j['Manage_IP_Addr'], 'Series_No': j['Series_No'], 'CI_modelid': j['CI_modelid'], 'MANUFACTURE_Factory': j[ 'MANUFACTURE_Factory'], 'OS_Version': j['OS_Version'], 'OS_Bin': j['OS_Bin'], 'Status': 'O'}) netdevice_final_excel.append({'Description': j['Description'], 'DevName': i['DevName'], 'Manage_IP_Addr': i['Manage_IP_Addr'], 'Series_No': i['Series_No'], 'CI_modelid': i['CI_modelid'], 'MANUFACTURE_Factory': i[ 'MANUFACTURE_Factory'], 'OS_Version': i['OS_Version'], 'OS_Bin': i['OS_Bin'], 'Status': 'U'}) update_netdevice_num += 1 break if import_temp is None: add_netdevice_num += 1 netdevice_final.append(i) if excel_flag: netdevice_final_excel.append({'Description': i['Description'], 'DevName': i['DevName'], 'Manage_IP_Addr': i['Manage_IP_Addr'], 'Series_No': i['Series_No'], 'CI_modelid': i['CI_modelid'], 'MANUFACTURE_Factory': i[ 'MANUFACTURE_Factory'], 'OS_Version': i['OS_Version'], 'OS_Bin': i['OS_Bin'], 'Status': 'A'}) logger.info("需要更新%d条,新增%d条!", update_netdevice_num, add_netdevice_num) if excel_flag: excel(netdevice_final_excel, 'netdevice') if update_flag: if update_netdevice_num != 0 or add_netdevice_num != 0: netdevice_dict = {"NetDevice": netdevice_final} cmdbuild_api = CMDBuildAPI() token = cmdbuild_api.get_token() update_result = cmdbuild_api.put_update(token, json.dumps(netdevice_dict)) # print update_result.decode("UTF-8") excel(netdevice_final, 'netdevice') cost_time = cost(import_netdevice_time) logger.info("更新数据成功! 耗时%d秒", cost_time) logger.info("cmdbuild平台更新返回结果:%s", update_result) else: cost_time = cost(import_netdevice_time) logger.info("两边数据一致,无需更新! 耗时%d秒", cost_time) elif not netdevice_h3c: logger.info("H3C平台没有获取数据!") elif not netdevice_cmdb: logger.info("cmdbuild没有获取数据!") except Exception, e: logger.info("更新数据失败!原因:%s", e)
def import_TProcess(TProcessList, TProcess_cmdb_list): TProcess_final = [] TProcess_final_excel = [] update_TProcess_num = 0 add_TProcess_num = 0 logger.info("本币进程数据开始比较!") import_time = datetime.datetime.now() try: for i in TProcessList: if i['PRTYPE'] != '12': import_temp = None for j in TProcess_cmdb_list: if i['DisplayName'].strip().upper( ) == j['DisplayName'].strip().upper(): # 去掉CMDB中进程名的回车、空格等 import_temp = j['Description'] if i['DisplayName'] != j['DisplayName']: TProcess_final.append({ 'Description': j['Description'], 'DisplayName': i['DisplayName'] }) if excel_flag: TProcess_final_excel.append({ 'Description': j['Description'], 'DisplayName': j['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'O' }) TProcess_final_excel.append({ 'Description': j['Description'], 'DisplayName': i['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'U' }) update_TProcess_num += 1 break if import_temp is None: add_TProcess_num += 1 TProcess_final.append({ 'Description': i['Description'], 'DisplayName': i['DisplayName'] }) if excel_flag: TProcess_final_excel.append({ 'Description': i['Description'], 'DisplayName': i['DisplayName'], 'PRTYPE': i['PRTYPE'], 'Status': 'A' }) logger.info("需要更新%d条,新增%d条!", update_TProcess_num, add_TProcess_num) if excel_flag: excel(TProcess_final_excel, 'TProcess_final') if update_flag: if update_TProcess_num != 0 or add_TProcess_num != 0: TProcess_dict = {"RuntimeProcess": TProcess_final} update_result = cmdbuild_api.put_update( token, json.dumps(TProcess_dict)) cost_time = cost(import_time) logger.info("更新数据成功! 耗时%d秒", cost_time) logger.info("cmdbuild平台更新返回结果:%s", update_result) else: cost_time = cost(import_time) logger.info("两边数据一致,无需更新! 耗时%d秒", cost_time) except Exception, e: logger.info("更新数据失败!原因:%s", e)
def import_storage(ips): storage_dict = mult_ssh2_storage(ips) for i in storage_dict: storage_fact.append(i['storage_fact']) storage_lun_fact.append(i['storage_lun_fact']) import_time = datetime.datetime.now() logger.info("Storage数据开始比较!") try: update_storage_num = 0 add_storage_num = 0 for i in storage_fact: storage_temp = None for j in Storage_cmdb: if i[0]['Series_No'] and j['Series_No']: while i[0]['Series_No'].upper() == j['Series_No'].upper(): storage_temp = i[0]['Series_No'] if cmp(i[0], j) != 0: Storage_final.append({ 'Description': j['Description'], # 'Firmware': i['Firmware'], 'DevName': i[0]['DevName'], 'Series_No': i[0]['Series_No'], 'Ctlr_Frequency': i[0]['Ctlr_Frequency'], 'MANUFACTURE_Factory': i[0]['MANUFACTURE_Factory'], 'CI_modelid': i[0]['CI_modelid'], 'IP': i[0]['IP'] }) j['status'] = 'O' Storage_excel.append(j) i[0]['status'] = 'A' Storage_excel.append(i[0]) update_storage_num += 1 break if storage_temp is None: Storage_final.append(i[0]) i[0]['status'] = 'A' Storage_excel.append(i[0]) add_storage_num += 1 logger.info("Storage数据比较结束!修改%d条,新增%d条", update_storage_num, add_storage_num) if update_flag: if update_storage_num != 0 or add_storage_num != 0: storage_dict = {"Storage": Storage_final} update_result = cmdbuild_api.put_update( token, json.dumps(storage_dict)) cost_os_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_os_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_os_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_os_time) if excel_flag: if Storage_excel: excel(Storage_excel, 'Storage') except Exception, e: logger.error("Storage数据比较失败,报错内容:%s", e)
def import_netdevice_interface(): logger.info("网络接口数据开始比较!") try: update_netdevice_interface_num = 0 add_netdevice_interface_num = 0 if netdevice_interface_cmdb and netdevice_interface_h3c: for i in netdevice_interface_h3c: compare_temp = None for j in netdevice_interface_cmdb: # 机器名和端口相同时 # ethernet、fastethernet、gigabitethernet输出值 if i['Switch_Name'] and j['Switch_Name']: while i['Switch_Name'].upper() == j['Switch_Name'].upper() and i['Port'] == restore( str(j['Port'])): compare_temp = i['Description'] if i['Port'] and i['Port'] != 'FastEthernet0' and i['Port'] != 'FastEthernet1': if cmp(i, j) != 0: netdevice_interface_final_info = {'Description': j['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'Use_Status': i['Use_Status']} if j['Use_Status'] == u'待下线': netdevice_interface_final_info['Use_Status'] = j['Use_Status'] if cmp(netdevice_interface_final_info, j): netdevice_interface_final.append(netdevice_interface_final_info) else: netdevice_interface_final_info['Use_Status'] = i['Use_Status'] netdevice_interface_final.append(netdevice_interface_final_info) update_netdevice_interface_num += 1 if excel_flag: netdevice_interface_final_info_old = {'Description': j['Description'], 'Switch_Name': j['Switch_Name'], 'Port': j['Port'], 'Vlan': j['Vlan'], 'Use_Status': j['Use_Status'], 'status': 'O' } # print netdevice_interface_final_info_old netdevice_interface_final_info_update = {'Description': j['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'status': 'U' } if j['Use_Status'] == u'待下线': netdevice_interface_final_info_update['Use_Status'] = j['Use_Status'] if cmp(netdevice_interface_final_info, j): netdevice_interface_final_excel.append( netdevice_interface_final_info_old) netdevice_interface_final_excel.append( netdevice_interface_final_info_update) else: netdevice_interface_final_info_update['Use_Status'] = i['Use_Status'] netdevice_interface_final_excel.append(netdevice_interface_final_info_old) netdevice_interface_final_excel.append(netdevice_interface_final_info_update) # print netdevice_interface_final_info_update break # 如果无法匹配,新增数据 # ethernet、fastethernet、gigabitethernet输出值 if compare_temp is None: if i['Port'] and i['Port'] != 'FastEthernet0' and i['Port'] != 'FastEthernet1': netdevice_interface_final.append(i) add_netdevice_interface_num += 1 if excel_flag: netdevice_interface_final_info_add = {'Description': i['Description'], 'Switch_Name': i['Switch_Name'], 'Port': i['Port'], 'Vlan': i['Vlan'], 'Use_Status': i['Use_Status'], 'status': 'A' } netdevice_interface_final_excel.append(netdevice_interface_final_info_add) logger.info("需要更新%d条,新增%d条", update_netdevice_interface_num, add_netdevice_interface_num) if excel_flag: if netdevice_interface_final_excel: excel(netdevice_interface_final_excel, 'netdevice_interface') if update_flag: import_time = datetime.datetime.now() if update_netdevice_interface_num != 0 or add_netdevice_interface_num != 0: netdevice_dict = {"Switch_Ports": netdevice_interface_final} # print json.dumps(netdevice_dict) logger.info("开始导入数据") update_result = cmdbuild_api.put_update(token, json.dumps(netdevice_dict)) cost_time = cost(import_time) logger.info("导入数据成功! 耗时%d秒", cost_time) logger.info("cmdbuild返回结果:" + update_result) else: cost_time = cost(import_time) logger.info("两边数据一致! 耗时%d秒", cost_time) elif not netdevice_interface_h3c: logger.info("H3C平台采集无数据!") elif not netdevice_interface_cmdb: logger.info("cmdbuild平台采集无数据!") except Exception, e: logger.error("导入数据失败! 原因:%s", e)