网工Python之路之netmiko模块实验(一)初来乍到
前言:
哈喽,前面我们已经初识了 netmiko 模块。本文我们将通过实验,重点学习 netmiko 向设备进行推送指令,抓去回显的操作。
感谢《网络工程师python之路》作者@弈心大神以及课代表网工手艺专栏@朱嘉盛大佬两位的传道。
代码语言:javascript复制
实验背景:
Netmiko 是作者 Kirk Byers 在 2014 年底基于 paramiko 开始开发的。它做了很多改进,如精简了 show (华为就是 display )命令的执行和回显内容的读取,简化了设备配置命令,支持了多厂商的设备和平台。(公众号:释然IT杂谈)
实验拓扑:
【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.242.2/24,桥接到云彩,Python所在。
【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。
【SSH 操作对象】Layer3Switch-x,IP为 192.168.242.1x/24。
实验背景:
Netmiko 模块 4 种设备配置函数, @弈心大神 文章中详细介绍,大家可先行认真阅读。我阅读后简述如下:
(1)send_command():向设备发送一条命令,通常用于查询、排错、保存等命令。
(2)send_config_set():向设备发送一条或多条配置命令,会自动适配到配置模式,通常配合指令列表。
(3)send_config_from_file():如 send_config_set() 指令列表过大,可单独放入文本中配合 send_config_from_file() 调用。
(4)send_command_timing():主动延迟等待,主要用于应对设备交互管理平台回显量大出现有意延迟或异常卡顿的现象。(初学者少用,本文暂不演示。)(公众号:释然IT杂谈)
实验目的:
通过 PC(192.168.242.2,Python所在),连接 Layer3Switch-1(192.168.242.12) ,完成如下三个小目标。
(1)调用 send_command() 函数,执行 display interface description 检查接口描述。
(2)调用 send_config_set() 函数,通过列表形式,配置 interface GigabitEthernet 0/0/0 的描述为“descby_send_config_set()”。
(3)调用 send_config_from_file()函数,通过文件形式,配置 interface GigabitEthernet 0/0/1 的描述为“descby_send_config_from_file()”。(公众号:释然IT杂谈)
实验准备及检查:
(1)完成实验拓扑组网,完成管理 IP 配置,账号配置。
(2)实验拓扑网络打通,在 PC 端可手工 ping 通设备,登录设备,执行命令。
(3)在 Layer3Switch-1 上用如下指令检查配置,如实验前有配置则清空。
代码语言:javascript复制display interface description | include GE0/0/[12][^0-9]
# 正则表达式在网络运维中是一把利器,稍作解释:
# 因为 LSW2 的 0 板是有 24 端口,我们只关注 GE0/0/1 和 GE0/0/2。
# 为了回显简洁,我们使用了 include 进行过滤。(公众号:释然IT杂谈)
# 正则表达式 GE0/0/[12][^0-9] 中 [12] 表示字符 1 或者 2 ,[^0-9] 表示非0-9。
# 于是 GE0/0/[12][^0-9] 只会匹配 GE0/0/1 和 GE0/0/2 ,不会匹配 GE0/0/3 等其它。
上述三点前序文章介绍过,这里从略。
(4)在实验文件夹中,准备实验目的(3)的预设指令,编辑后保存为 netmiko-config-lab2.txt。
Python代码:
netmiko 模块的脚本相对于 paramiko 真是精简太多了,有惊艳之感!
代码语言:javascript复制from netmiko import ConnectHandler
sw1 = {'device_type':'huawei',
'ip':'192.168.242.12',
'username':'python',
'password':'123'}
commands = ['interface GigabitEthernet 0/0/1', 'description descby_send_config_set()']
with ConnectHandler(**sw1) as connect:
print ("已经成功登陆交换机" sw1['ip'])
# 公众号:释然IT杂谈
print('===实验目的(1),交互形式推送一条指令。')
output = connect.send_command('display interface description | include GE0/0/[12][^0-9]')
print(output)
print('===实验目的(2),列表形式推送多条指令。')
output = connect.send_config_set(commands)
print(output)
print('===实验目的(3),文件形式推送多条指令。')
output = connect.send_config_from_file('netmiko-config-lab2.txt')
print(output)
print('===最后再检查配置')
output = connect.send_command('display interface description | include GE0/0/[12][^0-9]')
print(output)
# 华为设备的保存配置save后需要输入y进行确认,后面实验再演示。
执行脚本:
一切准备就绪,我们把代码跑起来,过程如下:
实验结果检查:
代码语言:javascript复制display interface description | include GE0/0/[12][^0-9]
实验扩展:
小伙伴想执行其他友商设备怎么办,这里以思科为例略微调整成思科类型和命令就行。(公众号:释然IT杂谈)
拓扑如下,只开启LSW1,用于测试。
实验小结:
好了,实验完成。希望通过这个实验,我们能清晰掌握 netmiko 几条指令配置函数的使用。大家生产有什么实际需求?可以试着拆分成几个小目标,逐一实现,最终再组合起来,满足日常生产,这样我们才能学以致用!