Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环
上次用NAPALM实现了一个给端口加description的小功能,但是那次仅仅是用于给一个设备的一个端口加description,没有实现一次给多个设备加,也没有实现一个给多个端口加(虽然这次也没实现,但是快了)。
今天只讨论IOS,古老的IOS。
循环的功能是通过bash自带实现的,其实也可以通过Python,只是我的Python太渣,并没有通过Ansible实现,是因为我现在还不太会用hosts,所以用的bash。添加配置的功能是通过NAPALM实现的。那么其实呢,通过NAPALM实现添加“配置文件”(配置片段 configuration snippet)到IOS上去是有两种方法的。第一种是像Gabriele的博客里写的那样,第二种是像Kirk的博客里写的那样
我目前用的第一种方法。然而我发现执行速度很低,可想而知,bash做循环,Python调用NAPALM功能,NAPALM里的netmiko再去连接真实设备。我先把第一种方法记下来好了,下一篇再写第二种方法,如下:
下面是Python文件,在写这个Python文件之前的准备工作在上一篇里有完整的描述。
__author__ = 'harry'
from netmiko import ConnectHandler
from napalm import get_network_driver
from sys import argv script, hostname = argv get_network_driver('ios')
driver= get_network_driver('ios') print "dealing with %s" % hostname device = driver(hostname,'mark1','mark1's_plaintext_password')
device.open()
device.load_merge_candidate(filename='/Users/harry/PycharmProjects/BulkTest/new_user_adding.conf')
device.compare_config()
output = device.compare_config()
print output device.commit_config()
device.close()
其实内容跟上一篇在Python的>>>界面里的东西差不多完全一样,不过这次就是传递了一个主机名从外头到这个Python script,所以执行起来如下
在我的Mac OS X的Shell里,在这个文件夹目录下,执行python BulkTest.py machine-name.whatever.com, 这样就会把这个主机名传递到Python script里的hostname变量上去,很简单的Python语法(learn python the hard way 中的某一课有讲解)。
为了多次执行这个Python script我在bash里加了个循环,以多次执行这个命令,这个bash如下(为啥执行速度快不起来,能快起来就怪了)
#!/bin/bash
more core_switches | while read line;
do
python BulkTest.py $line
done
这个 core_switches 就是一个普通的文件,里面存放一堆hostname,每个hostname占一行,也就是中间用回车割开,这样more它的时候,出来容易被read,read是bash自带功能。read的东西放到while循环里,然后循环的功能就做好了,下面执行这个bash就是了。
我记得不是很清楚了,似乎需要给这个bash的权限改成755,它才能在 ./+tab的时候出现,也就是作为一个可执行的bash命令,我没试过sudo会不会ok,可能会是可行的。
Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环的更多相关文章
- Ansible用于网络设备管理 part 3 使用NAPALM成品库
闲话 经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现NAPALM是一条路,NAPALM是由帅哥David Barroso和美女Elisa Jasinska创建的一个项目,都是颜值高的技术牛人啊,真是不给 ...
- Ansible用于网络设备管理 part 1 Jinja2 YAML初窥
这一次的实验内容依然来自Kirk Byers的博客,源地址在https://pynet.twb-tech.com/blog/python/paramiko-ssh-part1.html 但是,这次实验 ...
- Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解
虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...
- Ansible用于网络设备管理 part 0 安装和登录网络设备
真实在是累了,但是又怕第二天早上又忘掉,在这先大概写写. 安装: http://www.tecmint.com/install-and-configure-ansible-automation-too ...
- 此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求
FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”. 解决方法如下: 在Firefox地址栏输入about: ...
- 火狐----此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。
FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”.经网上搜索,解决方法如下: 在Firefox地址栏输入a ...
- Linux-TFTP之用于网络远程安装
TFTP:Trival File Transfer Protocol,简单文件传输协议.是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. ...
- 火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法
关于火狐浏览器访问本机IIS部署的网站弹出“此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求”这个错误(错误截图如下): 解决方法如下: 1.打开火狐浏览器, ...
- 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。
火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...
随机推荐
- Sql Server 的本地时间和UTC时间
一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...
- 做网站用UTF-8编码还是GB2312编码?
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. 经常我们打开外国网站的时 ...
- hibernate(十)双向关联关系的CRUD
本文链接:http://www.orlion.ml/28/ 一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = n ...
- Python——functools
该模块为高阶函数提供支持——作用于或返回函数的函数被称为高阶函数.在该模块看来,一切可调用的对象均可视为本模块中所说的“函数”. 目录 一.模块方法 1. functools.cmp_to_key(f ...
- Office英语学习好帮手
Office提供了强大实用的英语学习助手,它可以自动翻译中英文,还可以显示详尽的解释帮助信息,当然标准的发音也是必不可少的.如何启动屏幕取词翻译功能呢?如何让office自动取词并翻译呢?如何收听单词 ...
- 机器学习&数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)
前言: 这是coursera课程:Probabilistic Graphical Models上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算.具体实验内容可参考实验指导教材:bayes ...
- iOS_UIImage_Gif的分解
/** Gif的步骤 1. 拿到Gifd的数据 2. 将Gif分解为一帧帧 3. 将单帧数据转为UIImage 4. 单帧图片保存 */ github地址: https://github.com/ma ...
- 判断js数据类型和clone
判断返回js数据类型 function judgeType(arg){//判断返回js数据类型 return Object.prototype.toString.call(arg).slice(8,- ...
- ProGuard代码混淆技术详解
前言 受<APP研发录>启发,里面讲到一名Android程序员,在工作一段时间后,会感觉到迷茫,想进阶的话接下去是看Android系统源码呢,还是每天继续做应用,毕竟每天都是画UI ...
- CSS魔法堂:深入理解line-height和vertical-align
前言 一直听说line-height是指两行文本的基线间的距离,然后又说行高等于行距,最近还听说有个叫行间距的家伙,@张鑫旭还说line-height和vertical-align基情四射,贵圈真乱啊 ...