NAPALM概述:
NAPALM作为python的第三方模块,其依赖于Netmiko,但在使用时不需要单独导入Netmiko。
NAPALM的主要作用是将show或者display显示的结果转换为有序的结构类型(方便使用python进行处理分析),类似于textfsm和ntc-templates;同时,NAPALM还可以对网络设备进行配置,保存等操作。
NAPALM的最大缺点是,目前仅支持国外的主流厂商:思科、Arista、Juniper,对国内的设备的操作系统并不支持。
NAPALM具体操作详解请参照:
https://zhuanlan.zhihu.com/p/140919905
https://zhuanlan.zhihu.com/p/141226816
napalm-huawei-vrp:
github地址:https://github.com/napalm-automation-community/napalm-huawei-vrp
napalm-huwei-vrp模块作为NAPALM模块的补充,主要是增加了支持华为S系列园区网交换机驱动,支持S5700,S6700等的功能:
截止于2021年6月,本模块支持的功能如下:
- load_merge_candidate(): 加载给定的配置文件
- compare_config(): 比较候选配置(加载的配置)和当前运行配置,并显示不同点
- discard_config():删除加载的配置文件
- commit_config():执行加载的配置文件到设备
- get_facts(): 获取设备基础信息
- cli(): 发送任何命令到设备中
- get_lldp_neighbors(): 获取LLDP邻居信息
- get_config(): 获取配置信息
- is_alive(): 返回连接状态的标志
- ping(): 从设备中ping远端设备
- get_arp_table(): 获取设备APR表
- get_mac_address_table(): 获取设备MAC地址表
- get_interfaces(): 获取接口信息
- get_interfaces_ip(): 获取接口IP信息
- get_interfaces_counters(): 获取接口统计信息
其他功能正在逐步开发。
napalm-huawei-vrp安装:
pip3 install napalm
pip3 install napalm-huawei-vrp
实验测试:
实验环境: ENSP,IP地址规划如下,通告cloud1,保证运行python代码的设备能够ping通交换机。
实验目的: 检查设备的连通性,如果可以SSH(netmiko)登陆设备,则将设备标准配置和当前配置进行对比,如果有改变,则记录更改的信息。
步骤一: SW1-SW5上已经配置完了SSH,其中SW2和SW4无法正常通信。
交换机命令:
# 创建秘钥
[sw2]dsa local-key-pair create
## 配置SSH认证类型(密码/其他)
[sw2]ssh user prin authentication-type password
[sw2]ssh user prin service-type stelnet
[sw2]stelnet server enable
## 配置认证模式
[sw2]user-interface vty 0 4
[sw2-ui-vty0-4]authentication-mode aaa //配置认证模式
[sw2-ui-vty0-4]protocol inbound ssh //允许 ssh 连接虚拟终端
## 配置本地用户信息
[sw2]aaa
[sw2-aaa] local-user prin password cipher Huawei@123
[sw2-aaa]local-user prin privilege level 15
[sw2-aaa] local-user prin service-type ssh
步骤二: 在脚本运行的同一目录下,保存需要检查的配置文件信息(可以仅保留自己需要检查的部分配置信息):
步骤三: 修改设备当前运行的部分配置文件,做测试:
- SW1将设备名称修改为SW_NEW;
- 将SW3的Loopback0接口的IP地址undo掉;
- SW5配置保持不变。
步骤四: 编写napalm_huawei.py脚本:
from napalm import get_network_driver
from datetime import datetime
import time
driver = get_network_driver('huawei_vrp')
device_ip = ['192.168.0.11', '192.168.0.22', '192.168.0.33', '192.168.0.44', '192.168.0.55']
active_devices = []
while True:
# 找到能够连接的设备
for ip in device_ip:
try:
SW = driver(ip, 'prin', 'Huawei@123')
SW.open()
# 如果没有异常,则将IP地址添加到active_devices列表中
active_devices.append(ip)
except Exception as e:
print(ip + '连接失败')
# 查看配置有无更改,如果有更改,记录更改设备的IP地址,更改时间,更改的内容到记事本中
for ip in active_devices:
SW = driver(ip, 'prin', 'Huawei@123')
SW.open()
# 加载需要对比的文件
SW.load_merge_candidate(filename='napalm_config_' + ip + '.cfg')
# 对加载的配置文件和当前运行配置进行比较
differences = SW.compare_config()
if len(differences) > 0:
# 打印出给出标准配置对比当前运行配置有变动的地方
print(ip + ':' + differences)
# 获取当前时间的字符串
now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
# 将检查配置文件写入记事本中
with open('change_config', 'a') as f:
f.write(now + '\n\t' + ip + ':\n\t' + differences + '\n')
# 如果配置了下面一条代码,则将设备的配置信息按照提供的配置文件进行还原
# SW.commit_config()
else:
print(ip + ':' + '配置没有修改')
SW.discard_config()
# 每隔一小时运行一次脚本
time.sleep(3600)
测试结果:
pycharm运行结果:
文本记录信息: