Python-交换机⾃动化巡检脚本笔记
python-交换机巡检⾃动化
因为了解到python可以实现⾃动化的巡检功能,所以开始学习了《Python编程 从⼊门到实践》。通过⼀段时间的学习,将这本书的前11章看完,并开始搜索交换机巡检的相关模板,发现别⼈写的代码完全看不懂,很多模块,根本看不懂模块。经过⼀段时间的研究,要巡检,得学会以下⼏个模块:time、os、Netmiko、xlwt、re。
关于交换机的交互模块,有些⼤神⽤的是pexpect模块,使⽤ pexpect.spawn.sendline() 来发送交换机的命令和
pect() 来验证输出是否符合要求。⽽我这次所使⽤的就是 Netmiko
我从开始学习到能ctrl+v出⾃⼰想要的脚本的过程如下:
《Python编程 从⼊门到实践》——百度⼤神的脚本——了解⼤神脚本中模块的功能——根据需求⾃⼰写脚本
接下来我们开始了解编写脚本,所需要了解的模块吧
第⼀章、各模块介绍
1、time模块——⽣成时间相关
import time
>>> res = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
>>>print(res)
2021-04-1518:53:20
>>> res = time.strftime("%Y%m%d",time.localtime())
>>>print(res)
20210415
2、os模块的使⽤——创建⽬录
因为open模块只能创建⽂件,⽬录需要os模块来创建
import os
if not os.path.isdir("machine_learning"):#判定如何没有这个⽬录,就创建
os.makedirs("machine_learning")#创建
3、Netmiko-SSH巡检
通过ssh,巡检h3c的交换机。关键模块是ConnectHandler。
#!/usr/bin/python3
#H3c交换机
from netmiko import ConnectHandler
'''定义交换机,包括类型,密码,ip,主机名'''
ip_list =[
['交换机的sysname','交换机的管理ip'],
]
#这⾥定义了ssh要⽤到的参数
SW ={
'device_type':'hp_comware',#设备类型是netmiko预定义好的,现在⽤hp_comware是h3c的
'username':'admin',
'ip':'',
'password':"xxxxxx"
}
'''定义结束'''
'''交换机交互'''
for ip_item in ip_list:
SW['ip']= ip_item[1]
connect = ConnectHandler(**SW)
print(log_time +'Successfully connected to '+ ip_item[0])
output = connect.send_command('system view')
iproute = connect.send_command("display ip routing-table")
print(output)#验证
print(iproute)#验证
'''交换结束'''
3.2、Netmiko-telnet巡检
telnet与ssh的区别应该就在于,device_type中尾部添加_telnet,⽤的是Netmiko,⽽ssh⽤的是ConnectHandler。我们的telnet分为h3c和cisco。
H3C
from netmiko import Netmiko
'''定义交换机,包括类型,密码,ip,主机名'''
ip_list =[
['交换机的sysname','交换机的ip地址'],#定义设备的⽤户名和管理地址
]
SW ={
'device_type':'hp_comware_telnet',#设备类型是netmiko预定义好的
'username':'admin',
'ip':'',
'password':"xxxxxx",
}
'''完成定义'''
'''与交换机交互'''
for ip_item in ip_list:
SW['ip']= ip_item[1]
connect = Netmiko(**SW)
print(log_time +'Successfully connected to '+ ip_item[0])
config = connect.send_command('dis cur')
fan = connect.send_command('dis fan')
print(config)#验证⼀下值是不是想要的
print(fan)#验证⼀下值是不是想要的
cisco
主要的不同是,cisco的telnet是需要enable的。
from netmiko import Netmiko
'''定义交换机,包括类型,密码,ip,主机名'''
ip_list =[
['交换机的hostname','交换机的ip'],#定义设备的⽤户名和管理地址]
SW ={
'device_type':'cisco_iso_telnet',#设备类型是netmiko预定义好的'username':'admin',
'ip':'',
'password':"xxxxxx",#telnet的密码
'secret':'xxxxx',#enable的密码
}
'''完成定义'''
'''与交换机交互'''
for ip_item in ip_list:
SW['ip']= ip_item[1]
connect = Netmiko(**SW)
print(log_time +'Successfully connected to '+ ip_item[0])
config = connect.send_command('shun run')
cpu = connect.send_command('sh process cpu')
print(config)#验证⼀下值是不是想要的
print(fan)#验证⼀下值是不是想要的
4、xlwt模块-创建excel
import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('巡检报告第⼀次')#创建worksheet worksheet.write(0,0,label ='设备名称')#对A1添加内容worksheet.write(0,1,label ='属性')#对B1添加内容
worksheet.write(0,2,'值')#对C2添加内容
workbook.save('巡检报告⽣成.xls')#保存到excel,如果没有会创建。
5、re模块——正则表达式,截取想要的字段。
截取a-b之间的字符串:不包括ab
#注意有两种形式。⼀个匹配到第⼀个b,⼀个是匹配到最后⼀个b。import re
number ="a123b456b"
print(re.findall(r"a(.+?)b", number))#注意!匹配到第⼀个b。
#输出['123']
print(re.findall(r"a(.+)b", number))#这个是匹配到最后⼀个b
#输出['123b456']
另外⼀种正则表达式的使⽤形式:
import re
number ="a123b456b"
pattern = replie("a(.+)b")
print(pattern.findall(number))
#输出['123b456']
从a开始截取到b为⽌: 包括ab
import re
number ="a123b456b"
print(re.findall(r"a.+?b", number))#注意!匹配到第⼀个b。
#输出['a123b']
print(re.findall(r"a.+b", number))#这个是匹配到最后⼀个b
#输出['a123b456b']
第⼆章、巡检脚本介绍
1、巡检并记录下txt
这⾥只⾃定义了⼀个h3c的交换机巡检模块,⽽cisco的⼤同⼩异,差别在于 ”使⽤不同的netmiko⼦模块“、“定义交换机时多⼀个enable密码”、”多了enable模块(在第⼀章—3.2——cisco中有说明))“
#!/usr/bin/python3
#H3c交换机
'''-------模块导⼊--------'''
import time
from netmiko import ConnectHandler
from netmiko import Netmiko
import os
import re
import xlwt
'''--------模块导⼊结束--------'''
'''----------------------创建⽂件夹-------------------------'''
time_str = time.strftime('%Y_%m_%d', time.localtime())
path ="D:\\Seafile\\2021年农林维护\\3-巡检"
title ="%s"%time_str
new_path = os.path.join(path, title)#创建基于⽇期命名的⽂件夹
log_path ="%s\\巡检⽂件"%new_path
config_path ="%s\\配置⽂件备份"%new_path
if not os.path.isdir(new_path):
os.makedirs(new_path)
if not os.path.isdir(log_path):
os.makedirs(log_path)
if not os.path.isdir(config_path):
os.makedirs(config_path)
'''----------------------------创建⽂件夹结束------------------'''
'''-------------------和学校h3c交换机交互,并保留⽂本⽤于后期筛选数据的模块-----------'''
def h3c_ssh_v7(sysname,ipadd):
ip_list =[
[sysname,ipadd],
]
SW ={
'device_type':'hp_comware',
'username':'⽤户名',
'ip':'',
'password':"密码",
}
for ip_item in ip_list:
SW['ip']= ip_item[1]
connect = ConnectHandler(**SW)
print(time_str +'Successfully connected to '+ ip_item[0])
config = connect.send_command('dis current-configuration')
fan = connect.send_command('dis fan')
'''-----这⾥我们只需要dis process cpu第⼀⾏的资料,进⾏预筛查----'''
cpu = connect.send_command('dis process cpu')
connect和join的区别cpu = cpu.split('\n')#cpu show出来时纯字符串,我⽤split配合换⾏符分割。
cpu = cpu[0]#分割好只取第⼀⾏
cpu = cpu[0]#分割好只取第⼀⾏
'''-----------------------cpu内容预筛选结束-------------------'''
power = connect.send_command('dis power')
manager_ip = connect.send_command('dis ip int vlan 1 brief')
device = connect.send_command('dis device | exclude NONE')
'''-------------------同样时预筛查只需要前四⾏内容-----------------------'''
version = connect.send_command('dis version')
version = version.split('\n')
version ='\n'.join(version[0:4])#因为version[0:4]出来的是⼀个列表,所以使⽤join,将列表内容拼接成字符串。
'''-------------------------预筛查结束--------------------------------'''
config_fo =open('%s\\%s-%'%(config_path,ip_item[0],ip_item[1]),'w',encoding='utf-8')#创建配置备份,⽂件名时sysname-ipadd的格式。记住这⾥⼀定要加⼊encoding=‘utf-8',不然有些h3c设备可能会报错。
fo =open('%s\\%'%(log_path,ip_item[0],ip_item[1]),'w')#创建巡检的⽂件。存放巡检时候产⽣的数据
config_fo.write(config)
if cpu:#如果cpu有数据存在
fo.write(cpu)#把cpu的巡检结果写⼊巡检⽂件以下类似
fo.write('\n')#换⾏,让⽂本看的清楚些⽤的。以下⼤概就这些消息,不逐⼀说了
fo.write('\n')
if fan:
fo.write(fan)
fo.write('\n')
fo.write('\n')
if power:
fo.write(power)
fo.write('\n')
fo.write('\n')
if version:
fo.write(version)
fo.write('\n')
fo.write('\n')
if manager_ip:
fo.write(manager_ip)
fo.write('\n')
fo.write('\n')
if device:
fo.write(device)
h3c_ssh_v7('设备的sysname','设备的ip地址')记得调⽤函数
"""------------------------------------巡检备份结束-------------------------------------------------------"""
2、分析⽂件并写⼊excel报告
因为楼宇,核⼼,服务器核⼼所⽣成的巡检⽂件有很⼤的不同所以我选择了分开写。
这⾥我只列了我们核⼼交换机的数据抓取。
"""-------------------承接上⾯的代码(因为要⽤到导⼊的模块和变量))---⽣成报告-------------------------------"""
y =1#这个是⽤来记录我的excel写到了哪⼀⾏的
def h3c_core_report(hostname,ipadd):
file=open('%s\\%'%(log_path,hostname,ipadd))
adlines()
i=1#注意:在下⾯'''分析提取数据并提取'''代码块最后有个i += 1 ⽤于计数。当“我要抓取的数据在我能匹配到数据⾏的下⼀⾏。”的时候就会⽤到了。
'''------------------------分析数据并提取--------------------------------------------'''
for line in listlist:
if'CPU utilization'in line:
pattern = repile('5.+%')#正则匹配的匹配规则
cpu_use_list = pattern.findall(line)#使⽤规则抓出数据,下⾯的代码都是⼤同⼩异的抓取
for cpu_use in cpu_use_list:#因为抓出的数据是列表,⽤for循环转换为字符。其实可以⽤cpu_use_list[0]。
print(cpu_use)
if'weeks'in line:
run_time_list = re.findall("uptime is(.+?)\n",line)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论