Ansible用于网络设备管理 part 3 使用NAPALM成品库
闲话
经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现NAPALM是一条路,NAPALM是由帅哥David Barroso和美女Elisa Jasinska创建的一个项目,都是颜值高的技术牛人啊,真是不给别人留活路。话说我是因为在youtube上看CPAL的视频,然后youtube自己推荐我的这个视频,这个视频是来自于NANOG64上的某个片段,我竟然在提问环节看到了Steve Feldman我真是有种“地球村太小了”的感觉,话说老爷子说话一如既往的快,youtube的自动识别根本跟不上。
NAPALM的全称是Network Automation and Programmability Abstraction Layer with Multivendor support,是一个Ansible的成品库,可以通过pip install安装,也可通过git clone或者硬copy之后运行里面的setup.py来安装,还可以很逗逼的通过Pycharm随意写个Python文件,from napalm import "something" 然后等着Pycharm自带的git给你补全你所需要的一大堆依赖关系,对,在我眼里就是一大堆,用Pycharm直接节省时间是个不错的选择,但也因此失去了了解git的机会(作为一个网络工程师)(因此我也常常在想,作为一个网络工程师只懂网络是远远不够的,这也是我放弃追逐下一个CCIE的原因)(Steve Feldman尝试过不靠“版本”直接考CCIE结果折了,所以我也就觉得自己的CCIE来的实在是shameful,想了解些CCIE级别的知识自己敲敲IOU得了),我也记不清中间具体被哪些依赖关系给坑过了,目前回忆起来大概是Python2.7 lxml requests[security] libffi-devel,所以大家有个心理准备就是了。
正片
安装
我用了两种方法:
1. 在OS X 10.9.5上,PyCharm解决一切来安装。安装最新的PyCharm即可。不太推荐,学不到东西。
2. 在CentOS6.7上git clone https://github.com/napalm-automation/napalm.git 之后,'pip install requirements.txt'解决部分依赖关系。
- 如遇到lxml报错(一般长这样src/lxml/lxml.etree.c:199222: error:),先了解lxml是个啥,然后按照提示安装lxml,我曾经试过pip2.7 install lxml但是依然有etree的问题,所以我就滚去lxml官网一步步来了。如果还进一步遇到“
cc -I/usr/include/libxml2 -c /tmp/xmlXPathIniti07Gia.c -o tmp/xmlXPathIniti07Gia.o
/tmp/xmlXPathIniti07Gia.c:1:26: error: libxml/xpath.h: No such file or directory”这种报错,则yum install libxslt-devel libxml2-devel解决
- 如遇“
/usr/local/lib/python2.7/site-packages/pip-7.1.2-py2.7.egg/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning”这种报错,先pip install 'requests[security]',如果这个进一步提示你“failed with error code 1 in /tmp/pip-build-v3CWAF/cffi”这种错,先yum install libffi,再pip install 'requests[security]'
遇到的两个最头疼的依赖关系报错就是以上两个了,解决之后就好了。
解决好依赖关系之后就可以python setup.py install了,一切顺利的话就可以python setup.py install了,然后进入Python验证一下是否NAPALM安装成功了
[root@localhost napalm]# python
Python 2.7.7 (default, Dec 5 2015, 09:20:51)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from napalm import get_network_driver
>>> driver = get_network_driver('ios')
验证下小功能
Python 2.7.7 (default, Dec 5 2015, 09:20:51)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from napalm import get_network_driver
>>> driver = get_network_driver('ios')
>>> device = driver('这里填主机名或IP', '这里是15级用户名', '这里是密码')
>>> device.open()
SSH connection established to 主机名或IP:22
Interactive SSH session established
>>>
>>> device.get_facts()
{'os_version': u'12.2(52)SE, RELEASE SOFTWARE (fc3)\nCopyright (c) 1986-2009 by Cisco Systems, Inc.\nCompiled Fri 25-Sep-09 08:49 by sasyamal\nImage text-base: 0x00003000, data-base: 0x01500000\n\nROM: Bootstrap program is C2960 boot loader\nBOOTLDR: C2960 Boot Loader (C2960-HBOOT-M) Version 12.2(44)SE5', 'uptime': u'1 week, 20 hours, 44 minutes', 'interface_list': [u'Vlan1', u'VlanXXX', u'GigabitEthernet0/1', u'GigabitEthernet0/2', u'GigabitEthernet0/3', u'GigabitEthernet0/4', u'GigabitEthernet0/5', u'GigabitEthernet0/6', u'GigabitEthernet0/7', u'GigabitEthernet0/8', u'GigabitEthernet0/9', u'GigabitEthernet0/10', u'GigabitEthernet0/11', u'GigabitEthernet0/12', u'GigabitEthernet0/13', u'GigabitEthernet0/14', u'GigabitEthernet0/15', u'GigabitEthernet0/16', u'GigabitEthernet0/17', u'GigabitEthernet0/18', u'GigabitEthernet0/19', u'GigabitEthernet0/20', u'GigabitEthernet0/21', u'GigabitEthernet0/22', u'GigabitEthernet0/23', u'GigabitEthernet0/24', u'GigabitEthernet0/25', u'GigabitEthernet0/26', u'GigabitEthernet0/27', u'GigabitEthernet0/28', u'GigabitEthernet0/29', u'GigabitEthernet0/30', u'GigabitEthernet0/31', u'GigabitEthernet0/32', u'GigabitEthernet0/33', u'GigabitEthernet0/34', u'GigabitEthernet0/35', u'GigabitEthernet0/36', u'GigabitEthernet0/37', u'GigabitEthernet0/38', u'GigabitEthernet0/39', u'GigabitEthernet0/40', u'GigabitEthernet0/41', u'GigabitEthernet0/42', u'GigabitEthernet0/43', u'GigabitEthernet0/44', u'GigabitEthernet0/45', u'GigabitEthernet0/46', u'GigabitEthernet0/47', u'GigabitEthernet0/48', u'Port-channel1', u'Port-channel2', u'Port-channel3'], 'vendor': u'Cisco', 'serial_number': u'N/A', 'model': -1, 'hostname': u'XXXXXXXXXXXXX', 'fqdn': u'N/A'}
#可以看到这是个IOS哦,IOS哦!最不API的IOS哦
>>> device.load_merge_candidate(config='interface gi 0/8\ndes testNAPALM') #随便找了个端口写了下description做个测试吧
>>> device.compare_config()
+ interface gi 0/8
+ des testNAPALM
>>> device.commit_config()
>>> device.compare_config()
+ des testNAPALM
+ interface gi 0/8
+
+ do copy run start
>>> device.rollback()
#以上改gi0/8下的description的时候,我去真实机器上看了,的确work,rollback功能也是成功的,viva NAPALM!
(当然还是觉得我们自己的Playground屌屌哒,毕竟Playground是那么多年前的产品,那个时候还没有netmiko作支撑,现在还在服役,而且有图形界面,集成AD做AAA,所以也向orange team致敬!)
接下来打算拿NAPALM开始搞Python写点小东西,期间估计要参考一些实例,努力去搜集一些先。如果能集成到图形界面并且集成AD做个AAA,那么就没什么遗憾了。简直终极目标了。
Ansible用于网络设备管理 part 3 使用NAPALM成品库的更多相关文章
- Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环
上次用NAPALM实现了一个给端口加description的小功能,但是那次仅仅是用于给一个设备的一个端口加description,没有实现一次给多个设备加,也没有实现一个给多个端口加(虽然这次也没实 ...
- 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部署的网站弹出"此 ...
随机推荐
- swift 枚举类型
1:swift的枚举类型是一系列的值,不同于c语言中枚举类型是整数类型.每个枚举定义了个新的类型 2:switch类型匹配 2.1枚举类型和switch单个匹配 enum PlatType{ case ...
- UITabBarController的一些基础设置
利用代码添加UITabBarController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- 写出几种IE6 BUG的解决方法
1.双边距BUG float引起的 使用display:inline 2.3像素问题 使用多个float和注释引起的 使用dislpay:inline -3px 3.超链接hover 点击后失效 ...
- oracle create table(转)
//建测试表 create table dept( deptno number(3) primary key, dname varchar2(10), loc varchar2(13) ); crea ...
- dialog横竖屏切换时消失的解决方法
声明 本文原创,转载请注明来自xiaoQLu http://www.cnblogs.com/xiaoQLu/p/3324764.html dialog的生命周期依赖创建他的activity,怎么设置横 ...
- Linux 技巧:让进程在后台可靠运行的几种方法(转)
下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? ...
- asp.net 客户端上传文件全路径获取方法
asp.net 获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他 ...
- Android中项目中各个文件夹的含义和用途详解
1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...
- STL中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: namesp ...
- 关于Windows Phone平台音乐播放的的技术调研
希望看到这篇文章的开发者能提供你们的想法,让我们一起来探讨一款wp平台上面一款能流畅播放.能流畅拖拽进入条.只发一次请求就可以缓存的最好的播放器.希望大家能对我下面遇到的问题作出回答. 现在出了Win ...