闲话

经过了这俩月的闲暇时间的瞎逛和瞎琢磨,我发现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. 在Linux配置Nginx web服务器步骤

    系统环境:centos7 需要软件:nginx-1.3.16.tar.gz   libevent-2.0.21-stable.tar.gz  Pcre 和 pcre-devel nginx下载地址:h ...

  2. Git典型使用场景

    1. 在本地创建版本库(把本地的一个目录内的文件纳入版本库管理,方便查看变动历史,恢复版本等.不限于代码,可以是笔记等所有需要追踪历史的文件.) git init -- 把当前目录初始化为版本库 2. ...

  3. MongoDB学习:(二)MongoDB简单使用

    MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...

  4. PHP中设置时区方法小结

    找到原因后,在网上搜索到了一些关于PHP的时区设置方法: 1.修改php.ini,在php.ini中找到data.timezone =去掉它前面的;号,然后设置data.timezone = “Asi ...

  5. CSS样式汇总

    1. Overflow: 是否隐藏超出容器范围之外的内容,主要参数包括Hidden(隐藏),Auto(根据容器内容自动显示滚动条),scroll(显示滚动条,即使内容不超出容器范围,也会显示一个边框, ...

  6. Java 第14章 字符串

    字符串 基本数据类型和引用数据类型作为方法参数 ,在传递时有什么不同之处. 答:基本数据类型按值传递,相当于复制了一份过去. 引用数据类型是指向引用 内存地址,两个地方 根据地址使用同一份数据,如被更 ...

  7. JavaWeb常见错误总结

    错误1:(Ajax未加载问题) 今天我在学习AJAX的时候,想从一个JS文件中引入JQuery,然后在这个JS文件中使用AJAX的方法.结果V8引擎一直报错,错误类型是Uncaught Referen ...

  8. Dynamics 365-如何指定邮件收件人的地址

    如果CRM Entity勾选了Sending Email,那么这个Entity的Records是可以直接作为Email的收件人使用的,而邮件地址是Entity的Primary Email字段. 在我们 ...

  9. SD第九届省赛B题 Bullet

    Bullet Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description In G ...

  10. python 爬虫简化树状图