上次用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的方法+循环的更多相关文章

  1. Ansible用于网络设备管理 part 3 使用NAPALM成品库

    闲话 经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现NAPALM是一条路,NAPALM是由帅哥David Barroso和美女Elisa Jasinska创建的一个项目,都是颜值高的技术牛人啊,真是不给 ...

  2. Ansible用于网络设备管理 part 1 Jinja2 YAML初窥

    这一次的实验内容依然来自Kirk Byers的博客,源地址在https://pynet.twb-tech.com/blog/python/paramiko-ssh-part1.html 但是,这次实验 ...

  3. Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解

    虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...

  4. Ansible用于网络设备管理 part 0 安装和登录网络设备

    真实在是累了,但是又怕第二天早上又忘掉,在这先大概写写. 安装: http://www.tecmint.com/install-and-configure-ansible-automation-too ...

  5. 此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求

    FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”. 解决方法如下: 在Firefox地址栏输入about: ...

  6. 火狐----此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。

    FirFox打开80以外的端口,会弹出以下提示: “此地址使用了一个通常用于网络浏览以外的端口.出于安全原因,Firefox 取消了该请求.”.经网上搜索,解决方法如下: 在Firefox地址栏输入a ...

  7. Linux-TFTP之用于网络远程安装

    TFTP:Trival File Transfer Protocol,简单文件传输协议.是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. ...

  8. 火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法

    关于火狐浏览器访问本机IIS部署的网站弹出“此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求”这个错误(错误截图如下): 解决方法如下: 1.打开火狐浏览器, ...

  9. 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。

    火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...

随机推荐

  1. Javascript学习记录——数组去重

    var arr = [1, 2, 3, 5, 5, '45', '45', 4, 1, '1', '2'] for (var i = 0; i < 10000; i++) { arr.push( ...

  2. C++程序员们,快来写最简洁的单例模式吧

    想必每一位程序员都对设计模式中的单例模式非常的熟悉吧,以往我们用C++实现一个单例模式需要写以下代码: class CSingleton { private: CSingleton() //构造函数是 ...

  3. Node.js的学习--使用cheerio抓取网页数据

    打算要写一个公开课网站,缺少数据,就决定去网易公开课去抓取一些数据. 前一阵子看过一段时间的Node.js,而且Node.js也比较适合做这个事情,就打算用Node.js去抓取数据. 关键是抓取到网页 ...

  4. c#用socket异步传输字符串

    再次特别感谢张子阳老师的文章,是我深感益处. 在前一篇文章中可以看到,尽管消息分成了三条单独发送,但是服务端却将后两条合并成了一条.对于这些情况,我们可以这样处理:就好像HTTP协议一样,在实际的请求 ...

  5. Azure Redis Cache (2) 创建和使用Azure Redis Cache

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 注意: 截至今日2015年10月7日,国内由世纪互联运维的Azur ...

  6. springmvc学习笔记--json--返回json的日期格式问题

    (一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annotation-driven 2.在依赖管理中添加ja ...

  7. 用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)

    1.可以在博客园中使用latex代码输出公式,以后再以不用复制图片粘贴啦: http://www.cnblogs.com/cmt/p/3279312.html 例如以下代码两边加上 $ 符号后 x(k ...

  8. ES6 Features系列:Template Strings & Tagged Template Strings

    1. Brief ES6(ECMAScript 6th edition)于2015年7月份发布,虽然各大浏览器仍未全面支持ES6,但我们可以在后端通过Node.js 0.12和io.js,而前端则通过 ...

  9. 语义化HTML:i、b、em和strong标签

    一.前言 在HTML4.1中i和b作为表象标签分别表示斜体和粗体样式,而强调样式与内容分离的XHTML中则出现样式效果相同的em和strong表义标签,此时我们会建议避免使用i和b标签,应该改用em和 ...

  10. 让我们开启数据库无Linq、零sql时代

    让我们开启数据库无Linq.零sql时代 Moon.Orm 5.0总论 第一部分 MQL Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布)  Moon.Orm 5.0系列文章 1. ...