• 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) Copyright (c) 1986-2009 by Cisco Systems, Inc. Compiled Fri 25-Sep-09 08:49 by sasyamal Image text-base: 0x00003000, data-base: 0x01500000 ROM: Bootstrap program is C2960 boot loader BOOTLDR: 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 des 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,那么就没什么遗憾了。简直终极目标了。

  • 相关阅读:
    PyQt4信号与槽
    Amazon Redshift数据库
    NoSQL数据库的认识
    如何划分子网
    VPC见解
    Linux之添加交换分区
    MySQL基础之 标准模式通配符
    MySQL基础之 LIKE操作符
    MySQL基础之 AND和OR运算符
    MySQL基础之 索引
  • 原文地址:https://www.cnblogs.com/Vooom/p/5136540.html
Copyright © 2020-2023  润新知