Python批量备份交换机配置+自动巡检

自动巡检功能考虑到不同设备回显有所不同,需要大量正则匹配,暂时没时间搞这些,所以索性将命令回显全部显示,没做进一步的回显提取。
以下是程序运行示例:
#自动备份配置:

备份完成后,将配置保存于程序目录下的conf_bak文件夹下,如图所示:

 #自动巡检交换机设备:

使用前需创建excel文档,写入设备登录信息,格式如下:

本人编码能力一般,勿喷,源码: 

# coding=utf-8
from netmiko import ConnectHandler
from openpyxl import load_workbook
import os
from sys import exit
from netmiko import exceptions
import re
# 读取excel内设备列表信息
def check_and_get_dev_list(filename, sheet_name):excel_information = []sheet_header = []wb = load_workbook(filename)sh = wb[sheet_name]# 获取最大行数row = sh.max_row# 获取最大列数column = sh.max_columndata = []# 获取表头写入列表中方便调用for data_1 in range(1, column+1):get_sheet_header = sh.cell(row=1, column=data_1).valuesheet_header.append(get_sheet_header)# 第一行为表头, 此处 row +1 是pyton循环时不读取最后一个数for row_1 in range(2, row + 1):# 存储一行信息sheet_data_1 = dict()# 逐行读取表中的数据for b in range(1, column + 1):cell = sh.cell(row=row_1, column=b).value# 将数据已字典形式写入 sheet_data_1 中# if cell != None:sheet_data_1[sheet_header[b-1]] = cellexcel_information.append(sheet_data_1)for i in excel_information:if i['ip'] != None:data.append(i)return data#获取excel数据并整合成dev字典
def get_dev():res = check_and_get_dev_list('./resource.xlsx', 'Sheet1')devices = []for i in res:if i['protocol'] == 'telnet':i['type'] = i['type']+'_telnet'dev = {'device_type':i['type'],'host': i['ip'],'username': i['username'],'password': i['password'],'secret': i['enpassword'],'port': i['port'],}devices.append(dev)return devices# 配置批量备份导出
def devices_confbak(devices=''):# 创建备份文件夹try:path = './conf_bak'os.makedirs(path)except FileExistsError:pass# 存储连接失败的IPfailed_ips = []# 循环登录设备获取配置for dev in devices:try:with ConnectHandler(**dev) as conn:print('\n----------成功登录到:' + dev['host'] + '----------')conn.enable()if 'cisco_ios' in dev['device_type']:output = conn.send_command(command_string='show run')elif 'huawei' or 'hp_comware' in dev['device_type']:output = conn.send_command(command_string='dis current-configuration')else:print('error')with open('./conf_bak/'+ dev['host'] +'_conf_bak.txt', mode='w', encoding='utf8') as f:print('正在备份:'+dev['host'])# 文件读写异常处理try:f.write(output)except PermissionError:print('*****-无写入权限,请将文件夹赋予读写权限-*****')continueelse:print('备份成功!')# 连接异常处理except exceptions.NetmikoAuthenticationException:print('\n**********'+dev['host']+':登录验证失败!**********')failed_ips.append(dev['host'])continueexcept exceptions.NetmikoTimeoutException:print('\n**********'+dev['host']+':目标不可达!**********')failed_ips.append(dev['host'])continueexcept exceptions.ReadTimeout:print('\n**********'+dev['host']+':读取超时,请检查enable密码是否正确!**********')failed_ips.append(dev['host'])continueif len(failed_ips) > 0:print('\n以下设备连接失败,请检查:')for x in failed_ips:print(x)return 1# 配置巡检
def devices_autocheck(devices='', cmd=''):# 存储命令执行回显results = []try:for x in range(len(devices)):# 循环登录设备with ConnectHandler(**devices[x]) as conn:conn.enable()print('正在巡检:'+devices[x]['host']+' ...')result = [devices[x]['host'],devices[x]['device_type']]for i in range(len(cmd)):# 循环执行命令,根据不同设备执行不同命令if 'cisco_ios' in devices[x]['device_type']:output = conn.send_command(command_string=str(cmd[i]['cisco']))elif 'huawei' or 'hp_comware' in devices[x]['device_type']:conn.send_command(command_string='sys',expect_string=']')output = conn.send_command(command_string=str(cmd[i]['huawei']))result.append(output)results.append(result)except exceptions.NetmikoAuthenticationException:print('\n**********'+devices[x]['host']+':登录验证失败!**********')except exceptions.NetmikoTimeoutException:print('\n**********' + devices[x]['host'] + ':目标不可达!**********')except exceptions.ReadTimeout:print('\n**********' + devices[x]['host'] + ':读取超时,请检查enable密码是否正确!**********')return results
# 计算内存使用率
def get_mem(memstr,devtype=''):if 'cisco' in devtype:total_match = re.search(r'Processor Pool Total:\s+(\d+)', memstr)used_match = re.search(r'Used:\s+(\d+)', memstr)# 提取总数和已用数,并将其转换为整数total = int(total_match.group(1))used = int(used_match.group(1))# 计算使用百分比percentage = used / total * 100return f"{percentage:.0f}%"elif 'huawei' in devtype:match = re.search(r"Memory Using Percentage Is:\s*(\d+)%", memstr)if match:memory_percentage = match.group(1)return memory_percentage+'%'else:return "No match found."
# 获取CPU利用率
def get_cpu(cpustr,devtype=''):if 'cisco' in devtype:pattern = r"CPU utilization for five seconds: (\d+)%"match = re.search(pattern, cpustr)if match:cpu_utilization = match.group(1)return cpu_utilization+'%'else:return "No match found."elif 'huawei' in devtype:match = re.search(r"\b(\d+(\.\d+)?)%.*?\bMax", cpustr)if match:cpu_utilization = match.group(1)return cpu_utilization+'%'else:return "No match found."
# 运行主程序
if __name__ == '__main__':while True:print("\n##############################################\n")print("1:批量备份交换机配置")print("2:批量巡检交换机设备")print("0:退出")option = str(input("请输入需要的操作编号:"))if option == '1':dev = get_dev()devices_confbak(devices=dev)continueelif option == '2':# 定义巡检命令# cmds[x]['cisco']# cmds[x]['huawei']cmds = [{'cisco':'show clock','huawei':'display clock'},                        #检查时钟{'cisco':'show env power','huawei':'display power'},                    #检查电源{'cisco':'show env fan','huawei':'display fan'},                        #检查风扇{'cisco':'show env temperature status', 'huawei': 'display environment'},#检查温度{'cisco':'show processes cpu', 'huawei': 'display cpu-usage'},          #检查CPU利用率{'cisco':'show processes memory', 'huawei': 'display memory-usage'},    #检查内存利用率]dev = get_dev()checkres = devices_autocheck(dev,cmds)for res in checkres:# print(res)print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')print(res[0]+'-巡检结果:')print('\n时钟:\n'+res[2])print('电源:\n'+res[3])print('风扇:\n'+res[4])if 'Unrecognized command' in res[5]:print('温度:\n该设备不支持获取此数据!')else:print('温度:\n'+res[5])print('CPU利用率:\n' + get_cpu(res[6],res[1]))print('内存利用率:\n' + get_mem(res[7],res[1]))print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')continueelif option == '0':breakelse:print("请输入正确的编号!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android加固为何重要?很多人不学

为什么要加固? APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果: 1.防篡改&#x…

visionOS空间计算实战开发教程Day 5 纹理和材质

在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体,但对这个立方体我们只配置了长宽高,并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆…

UE5的TimeLine的理解

一直以来,我对动画的理解一直是这样的: 所谓动画,就是可导致可视化内容变化的参数和时间的对应关系。 我不能说这个观点现在过时了,只能说自己狭隘了。因为UE的TimeLine的设计理念真让人竖大拇指。 当我第一次看到TimeLine节点的…

FreeSQL 基本使用

FreeSQL连接MySQL 安装 FeeSql相关库 FreeSql 基本库 FreeSql.DbContext FreeSql.Extensions.Linq linq语法扩展库 FreeSql.Provider.Mysql MySQL连接库 新建DbConent.cs public class Base{static string connstr "Data Source127.0.0.1;Port3306;User IDroot;Pa…

Ubuntu apt-get换源

一、参考资料 ubuntu16.04更换镜像源为阿里云镜像源 二、相关介绍 1. apt常用命令 sudo apt-get clean sudo apt-get update2. APT加速工具 轻量小巧的零配置 APT 加速工具:APT Proxy GitHub项目地址:apt-proxy 三、换源关键步骤 1. 更新阿里源 …

猫咪不长肉怎么回事?搬空家底的增肥效果好的猫罐头分享

秋冬到了,北方有供暖还好,咱南方的小猫咪全靠一身正气,不囤点脂肪天生怕冷的小猫咪要怎么过冬啊?咋吃都吃不胖的猫可愁怀铲屎官了,想想我新手养猫那些年,为了给我家猫养胖点我是做了不少努力,当…

地奥集团大健康产业再添解酒黑科技:“酒必妥”!

地奥集团成都药业股份有限公司隶属于地奥集团旗下的子公司,至今已经超过百年历史,主要围绕化学药品在耕耘奉献。尽管公司历来都低调,但是地奥这块牌子在质量把控,安全生产把控等药品领域还是响当当。历年来,公司持续对…

vue3-响应式函数

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式函数 目录 ref 响应式函数 引言: ref 函数 reactive 函数 Reactive 与…

GNSS技术在交通运输领域的创新应用

全球导航卫星系统(GNSS)技术在交通运输领域发挥着越来越重要的作用,为汽车导航、航空、海运等交通模式提供了精准的定位和导航服务。本文将深入探讨GNSS技术在交通运输领域的应用,以及它对交通管理、安全性和效率的积极影响。 一、…

这些仪表板常用的数据分析模型,你都见过吗?

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 ##前言 在数字化时代,数据已经成为了企业决策和管理的重要依据。而仪表板作为一种数据可视化工具&#x…

Linux inotify 文件监控

Linux 内核 2.6.13 以后,引入了 inotify 文件系统监控功能,通过 inotify 可以对敏感目录设置事件监听。这样的功能被也被包装成了一个文件监控神器 inotify-tools。 使用 inotify 进行文件监控的过程: 创建 inotify 实例,获取 i…

【代码随想录】算法训练计划28

回溯 1、491. 递增子序列 题目: 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以…

【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer 前言 存储帐户作为其中一个数据终端存储,对安全性的要求非常高,不管…

40、Flink 的Apache Kafka connector(kafka source的介绍及使用示例)-1

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Linux常用命令——bmodinfo命令

在线Linux命令查询工具 bmodinfo 显示给定模块的详细信息 补充说明 bmodinfo命令用于显示给定模块的详细信息。 语法 bmodinfo(选项)(参数)选项 -a:显示模块作者; -d:显示模块的描述信息; -l:显示模块的许可信息…

Linux环境下安装部署单机RabbitMQ(离线)

摘要 本文档适用于在Linux系统下部署单体RabbitMQ,是在无网的情况下部署的。涉及的任何操作都是通过手动下载安装包然后上传到服务器上进行安装,因此也遇到一些问题,并在此文档中记录。 实际操作环境:Kylin V10,实际…

局域网协议:VLAN技术介绍

文章目录 VLAN概述VLAN的优点VLAN的原理VLAN的配置推荐阅读 VLAN概述 VLAN(Virtual Local Area Network虚拟局域网)是一种在物理网络基础上划分逻辑上独立的局域网的技术。它允许将网络设备按照逻辑上的需求而非物理位置进行分组,提供更好的…

西门子S7-200SMART常见通讯问题解答

1台200SMART 如何控制2台步进电机? S7-200SMART CPU最多可输出3路高速脉冲(除ST20外),这意味着可同时控制最多3个步进电机,通过运动向导可配置相应的运动控制子程序,然后通过调用子程序编程可实现对步进电…

单链表OJ--8.相交链表

8.相交链表 160. 相交链表 - 力扣(LeetCode) /* 解题思路: 此题可以先计算出两个链表的长度,让长的链表先走相差的长度,然后两个链表同时走,直到遇到相同的节点,即为第一个公共节点 */struct Li…

前端学习--React(1)

一、React简介 React由Meta公司研发,是一个用于 构建Web和原生交互界面的库 优势:组件化开发、不错的性能、丰富生态(所有框架中最好)、跨平台(web、ios、安卓) 开发环境搭建 打开相应文件夹 新建终端并…