python merge用法_网络工程师的Python之路 - NAPALM(续)

昨天的《网络工程师的Python之路 - NAPALM》中介绍了NAPALM这个十分强大又好用的开源Python模块,以及它Getter类API的用法,今天继续来讲下如何使用它Configuration类的API。前文中提到了,Configuration类的API包括替换(Config.replace),合并(Config.merge),比对(Compare config),原子更换(Atomic Changes),回滚(Rollback)等五项操作,本文中我将举例介绍最常用的合并和比对的用法。


合并(Config.merge)

Configuration类的合并(Config.merge)实际就是给设备做配置,它的方法是创建一个扩展名为.cfg的配置文件,将配置命令写入该配置文件,然后在脚本里使用NAPALM的load_merge_candidate()函数读取配置文件中的命令并上传到目标设备里,然后通过commit_config()将这些命令在设备上配置执行,load_merge_candidate()函数是基于SCP协议来向目标设备传送配置命令的,因此在使用load_merge_candidate()之前,我们首先需要在设备上开启scp server,否则NAPALM会返回“napalm.base.exceptions.CommandErrorException: SCP file transfers are not enabled. Configure 'ip scp server enable' on the device.”的错误:

8217caea1ef3d2c2351b984013e7e654.png
ff8df9bb78793553f4887146abafb17c.png

知道原理后,首先我们创建一个名为napalm_config.cfg的配置文件,将下面用来对交换机VTY的第5至15条线做基本配置的命令集写进该配置文件并保存:

386d353a9a2432227fc470bde48bca4b.png

然后创建一个名为napalm2.py的脚本:

31b3ab7a305fc98454386632a78345a2.png

将下面的代码放入脚本:

 from napalm import get_network_driver   driver = get_network_driver('ios') SW1 = driver('192.168.2.11', 'python', '123') SW1.open()   SW1.load_merge_candidate(filename='napalm_config.cfg') SW1.commit_config() 

代码讲解如下:

  • 这里我们用load_merge_candidate(filename='napalm_config.cfg')加载我们之前创建好的配置文件napalm_config.cfg,然后配合NAPALM的commit_config()方法执行该配置文件里的配置命令即完成了对交换机的配置任务。

执行代码前,我们先检查一遍交换机192.168.2.11的配置,确认当前交换机没有line vty 5 15的配置:

03bd2287258c9180bc037bdbc2469d9c.png

然后执行脚本(因为代码里我们没有使用任何print语句,因此这里执行代码后没有任何回显内容):

e2e5c4995efab9b8a8df735e28305e4e.png

然后回到交换机检查配置:

108d09eb09c024a2247d965f895d0397.png

可以看到执行脚本后NAPALM已经帮我们完成了VTY 5至15线的配置,并且“show start | s line vty ”的回显内容证实了在完成配置的同时NAPALM也帮我们保存了该配置。


比对(Compare Config)

接下来我们看下如何使用Configuration类中的比对。首先我们手动将line vty 5 15下面的“ login local”、“transport input ssh”、“transport output ssh”三条命令都从交换机里移除,移除之后再“show run | s line vty”可以看到之前的三条命令现在已分别被“no login”、“transport input none”以及“transport output none”替代:

3e107c347d41eaac20563a5e1a54f4a5.png

接着我们创建一个名为napalm3.py的脚本:

d3c7b24b00503a3f85317363dd813575.png

将下面代码写入该脚本:

 from napalm import get_network_driver   driver = get_network_driver('ios') SW1 = driver('192.168.2.11', 'python', '123') SW1.open()   SW1.load_merge_candidate(filename='napalm_config.cfg')   differences = SW1.compare_config() if len(differences) > 0:  print(differences)  SW1.commit_config() else:  print('No changes needed.')  SW1.discard_config() 

代码讲解如下:

  • 这里我们照例用load_merge_candidate(filename='napalm_config.cfg')加载我们之前创建好的配置文件napalm_config.cfg,然后我们调用NAPALM的compare_config()方法。顾名思义,compare_config()是NAPALM用来将napalm_conig.cfg文件里的配置命令和交换机当前的配置做比对用的,它返回的值(即比对的结果)的数据类型为字符串。这里我们将该比对结果赋值给difference这个变量,然后我们用if语句配合len()函数对比对结果difference做分析,如果len()返回的整数大于0,即说明difference的内容为非空,也就说明配置文件里的命令和交换机当前的配置有区别,我们将比对结果打印出来,然后再调用commit_config()将漏掉的命令补上。反之,如果len()返回的整数为0,说明配置文件里的命令和交换机当前的配置一致,我们打印内容“No changes needed.”提醒用户不需要对交换机配置做任何更改并调用NAPALM的discard_config()方法来放弃之前通过load_merge_candidate(filename='napalm_config.cfg')从配置文件napalm_config.cfg里加载好的配置命令。

接下来执行脚本看效果:

05b59d154a2cb64b93eba0e13079166a.png

注意到三条命令前的三个加号“+”了吗?它是difference这个代表比对内容的变量的具体内容,表示compare_config()方法在将配置文件里的配置命令和交换机现有的配置做比对后,发现交换机里还缺少这三条命令,然后我们通过“SW1.commit_config()”将这三条命令在交换机里补上。下面我们登录交换机来验证:

9a82ef013aa68d71d92ce30255c722a3.png

可以发现NAPALM将交换机缺少的“login local”、“transport input ssh”、“transport output ssh”这三条命令又补回来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值