百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

网络工程师的Python之路 -- pyntc

off999 2024-10-18 08:08 34 浏览 0 评论

弈心:从事计算机网络工作11年(新加坡7年,沙特4年),2013年考取CCIE,在新加坡先后任职于AT&T,新加坡交通部,苹果,Equinix,苏格兰皇家银行等大型企业、银行和政府部门。 目前供职于“世界第一土豪大学“沙特阿卜杜拉国王科技大学(KAUST),担任Senior Network Engineer,为KAUST校史上第一位也是唯一一位华人IT部门高级职员。2019年6月在知乎发布了华语圈第一本专门为编程零基础的网络工程师量身打造的Python教程《网络工程师的Python之路》。


前面几篇专栏文章已经介绍了TextFSM, ntc-template以及NAPALM,除了这些好用的第三方模块和模板集外,pyntc也是一个非常优秀的用来帮助我们管理网络设备配置、升级网络设备OS、重启网络设备的第三方开源Python模块。也许你从名字上已经猜出来了,是的,同ntc-templates一样,pyntc也是由Network to Code团队开发制作的,其源码存放在Github上:https://github.com/networktocode/pyntc。

pyntc和NAPALM的比较

同NAPALM一样,pyntc也依赖于netmiko(如果对象设备使用的是思科IOS操作系统的话),但又可以在脚本里独立使用(只需要保证运行脚本的主机安装了netmiko即可),这个特性使得pyntc拥有同NAPALM一样的一大优点:让网络运维的脚本代码简洁、易懂、便于维护。

和为不同厂商设备提供统一API的NAPALM不一样,pyntc是一种多厂商、多API的模块,截至2020年5月,Pyntc支持包括思科、Arista、Juniper在内的三家主流设备厂商的四种操作系统:

  • Cisco IOS platforms - uses SSH (netmiko)
  • Cisco NX-OS - uses pynxos (NX-API)
  • Arista EOS - uses pyeapi (eAPI)
  • Juniper Junos - uses PyEz (NETCONF)

可以看到,针对不同的操作系统,Pyntc提供的API是不一样的。针对使用思科IOS的传统设备,因为它们不支持API,因此pyntc借助的是netmiko提供的SSH功能来对这些设备进行访问和管理,而针对使用NX-OS操作系统的思科Nexus系列设备,pyntc使用的是NX-OS自带的NX-API,而针对另外两个厂商:Arista和Juniper,pyntc则分别依赖于它们自带的eAPI和NETCONF来对设备进行访问和管理。

pyntc的安装

作为Python的第三方模块,pyntc有两种安装方法。

第一种方法是使用pip直接安装:

Pip安装完毕后进入Python并import pyntc,如果Python没有报错则说明安装成功。

除了pip外,我们也可以使用下面的git clone命令从GitHub下载textfsm的源代码并安装,如果你的CentOS 8主机没有安装git,系统会提醒你一并安装。

 git clone https://github.com/networktocode/pyntc.git
 cd pyntc
 python setup.py install

pyntc的应用

本节以实验的形式来分别演示如何使用pyntc来对使用思科IOS操作系统的目标设备完成以下几项操作:

  • 获取目标设备的基本信息
  • 对目标设备进行配置
  • 获取目标设备的running config
  • 对目标设备的running config进行备份
  • 重启目标设备

获取目标设备的基本信息

首先创建一个名为pyntc1.py的脚本,将下列代码放入该脚本中:

 import json
 from pyntc import ntc_device as NTC
  
 SW1 = NTC(host='192.168.2.11', username='python', password='123', device_type='cisco_ios_ssh')
 SW1.open()
  
 print (json.dumps(SW1.facts, indent=4))
 SW1.close()

代码讲解如下:

  • ntc_device是pyntc最重要的子模块,pyntc通过它来SSH访问目标IOS设备,因为它的名字有点偏长,这里我们使用“from pyntc import ntc_device as NTC”将其命名为NTC并调用它。
  • 前面讲到了,同NAPALM一样,pyntc也是依赖于netmiko的,因此访问设备的基本配置和方法大体是一样的,这里需要注意的是因为我们要访问的目标设备是一台思科IOS设备,因此NTC()里的device_type这个参数我们使用“cisco_ios_ssh”。
  • 同NAPALM一样,访问目标设备的基本参数配置好后,我们再调用open()函数即完成了SSH远程登录交换机的操作。
  • Pyntc中的facts方法用来帮我们读取目标设备的厂商、设备型号、OS版本、序列号、主机名、uptime、端口列表、VLAN等基本信息和配置,为了使输出的内容更具可读性,这里我们调用json.dumps()来将输出内容转换成JSON的格式。
  • 脚本最后使用close()方法退出交换机,关闭SSH进程。

运行脚本看效果:

注:因为这里我使用的是GNS3模拟器上的虚拟交换机(vios_l2-adventerprisek9-m),因此pyntc读取不到“model”、“os_version”、“serial_number”几项信息,这个影响不大,如果目标设备为真机则不会有这个问题。


对目标设备进行配置

在pyntc中,我们可以使用config()以及config_list()来对目标设备进行配置,两者的区别是前者一次只能对设备执行一条命令,而后者顾名思义是将多条命令作为元素放入一个列表中,pyntc依次调用列表里的命令对设备进行配置。

接下来我们创建一个名为pyntc2.py的脚本,将下列代码放入该脚本中:

 from pyntc import ntc_device as NTC
  
 SW1 = NTC(host='192.168.2.11', username='python', password='123', device_type='cisco_ios_ssh')
 SW1.open()
  
 SW1.config('hostname pyntc_SW1')
 SW1.config_list(['router ospf 1', 'network 0.0.0.0 255.255.255.255 area 0'])
 SW1.close()

代码讲解如下:

  • 这里我们使用config(‘howname pyntc_SW1’)将交换机的主机名由SW1改为pyntc_SW1,用config_list([‘router ospf 1’, ‘network 0.0.0.0 255.255.255.255 area0’])在交换机上开启OSPF。
  • 运行脚本前,先手动登录交换机,确定它目前的主机名为SW1,并且还没有配置OSPF:

运行脚本后,因为我们没有使用print语句,因此不会有任何回显内容:

回到交换机,这时可以发现其主机名已经被pyntc配置为pyntc_SW1,并且OSPF也被开启了。


获取目标设备的running config

通过pyntc的running_config方法我们也可以很方便的获取设备的running config,该方法返回值的数据类型为字符串,我们可以用print语句将它打印出来。这里我们创建一个名为pyntc3.py的脚本,将下列代码放入脚本:

 from pyntc import ntc_device as NTC
  
 SW1 = NTC(host='192.168.2.11', username='python', password='123', device_type='cisco_ios_ssh')
 SW1.open()
  
 run = SW1.running_config
 print (run)
 SW1.close()

代码讲解部分略过,我们直接来看脚本运行后的效果(由于回显内容的长度,这里只截取其中一部分):


对目标设备的running config进行备份

除了获取设备的running config外,我们也可以通过pyntc对设备running config做备份。这里我将演示如果通过pyntc的backup_running_conig()方法,仅仅使用5行代码就将一台交换机的配置备份在本地主机上。

首先将下列代码写入名为pyntc4.py的脚本中:

 from pyntc import ntc_device as NTC
  
 SW1 = NTC(host='192.168.2.11', username='python', password='123', device_type='cisco_ios_ssh')
 SW1.open()
  
 SW1.backup_running_config('SW1_config.cfg')
 SW1.close()

代码讲解如下:

  • 这里我们调用pyntc的backup_running_config()对交换机的running config做备份,将它保存在一个名为“SW1_config.cfg”的配置文件里,该配置文件将自动生成在运行脚本的CentOS主机的当前目录下。

运行脚本前,我们首先在主机上通过命令“ls SW_config.cfg”确认当前目录下没有SW1_config.cfg这个文件:

执行脚本看效果:

执行脚本后,可以看到当前目录现在多出了SW1_config.cfg这个配置文件,查看该文件内容,确认的确是交换机SW1的running config,一台思科设备配置的备份仅仅通过5行代码就完成了。


重启目标设备

最后我们来看下如何使用pyntc来重启目标设备。首先将下列代码写入名为pyntc5.py的脚本中:

 from pyntc import ntc_device as NTC
  
 SW1 = NTC(host='192.168.2.11', username='python', password='123', device_type='cisco_ios_ssh')
 SW1.open()
  
 SW1.save()
 SW1.reboot(confirm=True)

代码讲解如下:

  • 在重启设备前,首先要保证当前的配置已被保存,这里我们使用pyntc的save()方法,它的功能等同于思科的“copy run start”命令,随后我们调用pyntc的reboot()方法,并将参数confirm设为True,表示确认要对设备重启。

执行脚本看效果:

执行脚本后,可以看到交换机上面跳出了日志提示(这里我们通过console访问交换机),证明脚本对交换机执行了“copy run start”命令,保存了当前的配置,随后对交换机执行了reload命令,重启了设备。

最后当交换机重新回到命令行后,可以发现之前配置的交换机hostname以及OSPF都保存了下来。

相关推荐

推荐一款Python的GUI可视化工具(python 可视化工具)

在Python基础语法学习完成后,进一步开发应用界面时,就需要涉及到GUI了,GUI全称是图形用户界面(GraphicalUserInterface,又称图形用户接口),采用图形方式显示的计算机操...

教你用Python绘制谷歌浏览器的3种图标

前两天在浏览matplotlib官方网站时,笔者无意中看到一个挺有意思的图片,就是用matplotlib制作的火狐浏览器的logo,也就是下面这个东东(网页地址是https://matplotlib....

小白学Python笔记:第二章 Python安装

Windows操作系统的python安装:Python提供Windows、Linux/UNIX、macOS及其他操作系统的安装包版本,结合自己的使用情况,此处仅记录windows操作系统的python...

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字

Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...

一文吃透Python虚拟环境(python虚拟环境安装和配置)

摘要在Python开发中,虚拟环境是一种重要的工具,用于隔离不同项目的依赖关系和环境配置。本文将基于windows平台介绍四种常用的Python虚拟环境创建工具:venv、virtualenv、pip...

小白也可以玩的Python爬虫库,收藏一下

最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...

python环境安装+配置教程(python安装后怎么配置环境变量)

安装python双击以下软件:弹出一下窗口需选择一些特定的选项默认选项不需要更改,点击next勾选以上选项,点击install进度条安装完毕即可。到以下界面,证明安装成功。接下来安装库文件返回电脑桌面...

colorama,一个超好用的 Python 库!

大家好,今天为大家分享一个超好用的Python库-colorama。Github地址:https://github.com/tartley/coloramaPythoncolorama库是一...

python制作仪表盘图(python绘制仪表盘)

今天教大家用pyecharts画仪表盘仪表盘(Gauge)是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...

总结90条写Python程序的建议(python写作)

  1.首先  建议1、理解Pythonic概念—-详见Python中的《Python之禅》  建议2、编写Pythonic代码  (1)避免不规范代码,比如只用大小写区分变量、使用容易...

[oeasy]python0137_相加运算_python之禅_import_this_显式转化

变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串输入单个变量没有问题但是输入两个变量之后一相加就非常离谱添加图片注释,不超过1...

Python入门学习记录之一:变量(python中变量的规则)

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

掌握Python的"魔法":特殊方法与属性完全指南

在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...

11个Python技巧 不Pythonic 实用大于纯粹

虽然Python有一套强大的设计哲学(体现在“Python之禅”中),但总有一些情况需要我们“打破规则”来解决特定问题。这触及了Python哲学中一个非常核心的理念:“实用主义胜于纯粹主义”...

Python 从入门到精通 第三课 诗意的Python之禅

导言:Python之禅,英文名是TheZenOfPython。最早由TimPeters在Python邮件列表中发表,它包含了影响Python编程语言设计的20条软件编写原则。它作为复活节彩蛋...

取消回复欢迎 发表评论: