python-交换机巡检自动化
因为了解到python可以实现自动化的巡检功能,所以开始学习了《Python编程 从入门到实践》。通过一段时间的学习,将这本书的前11章看完,并开始搜索交换机巡检的相关模板,发现别人写的代码完全看不懂,很多模块,根本看不懂模块。经过一段时间的研究,要巡检,得学会以下几个模块:time、os、Netmiko、xlwt、re。
关于交换机的交互模块,有些大神用的是pexpect模块,使用 pexpect.spawn.sendline() 来发送交换机的命令和 pexpect.swapn.expect() 来验证输出是否符合要求。而我这次所使用的就是 Netmiko
我从开始学习到能ctrl+v出自己想要的脚本的过程如下:
《Python编程 从入门到实践》——百度大神的脚本——了解大神脚本中模块的功能——根据需求自己写脚本
接下来我们开始了解编写脚本,所需要了解的模块吧
第一章、各模块介绍
1、time模块——生成时间相关
import time
>>> res = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
>>> print(res)
2021-04-15 18: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)
connect.enable() #注意这个地方!cisco是这样enable的
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(.&