网工Python之路之netmiko模块实验(三)连接多机

2022-10-27 19:28:15 浏览数 (1)

网工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文件的末位有空白行的话,跑码会出错。算是我自己的“温故而知新”项吧。

0 人点赞