闲话

经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现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成品库的更多相关文章

  1. Ansible用于网络设备管理 part 4 使用NAPALM成品库+Gabriele的方法+循环

    上次用NAPALM实现了一个给端口加description的小功能,但是那次仅仅是用于给一个设备的一个端口加description,没有实现一次给多个设备加,也没有实现一个给多个端口加(虽然这次也没实 ...

  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. 如何在wp8 中调试cocos2dx c++ 代码

    有的时候在win32上运行良好的cocos2dx程序移植到wp8的时候就出了问题,我们想把断点放到c++代码中,需要设置一下VS 2012 右击项目属性 把ui任务 设置为仅限本机 即可.

  2. osgi: HttpService A null service reference is not allowed.

    最近在学习osgi,在练习HttpService的过程中,一直出现“A null service reference is not allowed”这样的报错,代码本身没有问题,在网上也搜了不少地方, ...

  3. TL(简单)

    TL time limit per test 2 seconds memory limit per test 256 megabytes input standard input output sta ...

  4. tcp为什要三次握手

    准备知识: 单工:信息只能单向传递.发送-->接收,单向,不能返回响应. 双工:指的是信息可双向发送. 全双工:信息可同时双向传递. 半双工:不能同时,单行道,一边传输完了,另一边才能发起传输. ...

  5. JS DOM元素

    // 为element增加一个样式名为newClassName的新样式 function addClass(element, newClassName) { var value = element.c ...

  6. 【目录】C#操作Excel组件Spire.XLS系列文章目录

    本博客所有文章分类的总目录链接:http://www.cnblogs.com/asxinyu/p/4288836.html 1.C#操作Excel组件Spire.XLS文章目录 1.[原创].NET读 ...

  7. linux VM复制多个IP配置出错的处理

    device eth0 does not seem to be present, delaying initialization (2012-09-13 21:16:38) 转载▼ 标签: 杂谈   ...

  8. Ladda – 把加载提示效果集成到按钮中,提升用户体验

    Ladda 是一组集成了加载提示的按钮,以弥合行动和反馈之间的时间间隔,提供更好的功能使用体验.主要用于在用户点击提交之后,向用户提供即时的反馈,让他们知道浏览器正在处用户提交的任务. 您可能感兴趣的 ...

  9. Storm集群部署

    一. 说明 Storm是一个分布式实时计算系统,Storm对于实时计算的意义就相当于Hadoop对于批量计算的意义.对于实时性较高的系统Storm是不错的选择.Hadoop提供了map, reduce ...

  10. Android学习笔记(第一篇)编写第一个程序Hello World+Activity

    PS:终于开始正式的搞Android了...无人带的一介菜鸟,我还是自己默默的努力吧... 学习内容: 1.编写第一个Hello World程序..   学习Android,那么就需要有一个编译器来集 ...