网工Python之路之netmiko模块实验(一)初来乍到
网工Python之路之netmiko模块实验(二)推送配置
前言:
希望朋友们学完能根据自己运维网络的实际情况,摸索属于自己运维网络的自动化方案。这次实验我们来讨论下netmiko模块连接多台设备的情况。
感谢@弈心大神@朱嘉盛大佬两位的传道。
代码语言:javascript复制
实验拓扑:
【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.242.2/24,桥接到云彩,Python所在。
【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。
【SSH 操作对象】Layer3Switch-x,IP为 192.168.242.1x/24。
实验背景:
现网如果只有一台设备,那我们还讨论啥运维自动化哈?咱们把整台设备的配置文件都背下来就行了。事实上,稍微大一点的企业,网络设备量都是几百上千的。前面的实验,我们都是通过netmiko登录1台设备,这次我们来用netmiko模块操作多台设备,顺便串一下以前paramiko模块实验中用到的“循环遍历、读取文件、异常处理”等,当做温故而知新吧。
实验目的:
(1)用netmiko登录各台LSW,执行display cur | inc sysname命令,抓取回显。
(2)用netmiko处理“网络不通”,“认证失败”2个模拟场景。
实验准备及检查:
(1)完成实验拓扑组网,完成管理 IP 配置,账号配置。我们把LSW3的密码从“123”改成“456”,模拟认证失败的场景。
(2)实验拓扑网络打通,在 PC 端可手工 ping 通设备,登录设备,执行命令。我们把设备列表中的LSW5机器关闭,模拟网络不通。
(3)display arp xxx,ping 地址等操作,这里从略。如遇到网络不通,则排障处理。(公众号:释然IT杂谈)
Python代码:
这个实验我还重点把一些早前学习的知识串一下。
代码语言:javascript复制import netmiko
from netmiko import ConnectHandler
# 存放认证失败的设备信息
switch_with_authentication_issue = []
# 存放网络不通的设备信息
switch_not_reachable = []
with open('ip_list.txt') as f:
for ips in f.readlines():
try:
ip = ips.strip()
connection_info = {
'device_type': 'huawei',
'ip': ip,
'username': 'python',
'password': '123',
#'conn_timeout':10
}
with ConnectHandler(**connection_info) as conn:
print (f'已经成功登陆交换机{ip}')
output = conn.send_command('display cur | inc sysname')
print(output)
except netmiko.NetmikoAuthenticationException:
print(ip "用户验证失败!")
switch_with_authentication_issue.append(ip)
except netmiko.ssh_exception.NetmikoTimeoutException:
print(ip "目标不可达!")
switch_not_reachable.append(ip)
# 公众号释然IT杂谈
print('n ====结果输出====')
print('·下列交换机用户验证失败:')
for i in switch_with_authentication_issue:
print(f" {i}")
# 公众号:释然IT杂谈
print('·下列交换机不可达:')
for i in switch_not_reachable:
print(f" {i}")
执行脚本及结果:
好了,跑起来,都是符合我们预期的,常试截在一张图吧,大家试试看吧。
实验小结:
(1)这次我们借netmiko模块操作多台设备的机会,顺便串一下以前paramiko模块实验中用到的“循环遍历、读取文件、异常处理”等,当做温故而知新吧。至于try-except中要except什么值呢?我是用IDLE命令好模式一个一个测出来的。
(2)实验这么久,今天发现如果ip_list.txt文件的末位有空白行的话,跑码会出错。算是我自己的“温故而知新”项吧。