★ 资深网络老兵、知乎专栏“网路行者”作者联合“网工手艺”作者全新打造
★ 面向Python零基础网工的Go-To Book再版升级,基于Python 3.10
★ 新增TextFSM、Netmiko、Nornir、NETCONF、RESTCONF等内容,知识点更全
★ 从基础知识到实战应用,作者手把手教学,逐步引导,可作为教学用书
★ 13种Python语法知识全覆盖,助力传统网工轻松转型
★ 10余种Python网络运维相关模块,举例介绍更多实用工具
★ 60余个实验,覆盖模拟器及真机(思科和华为设备),实用性更强
★ 加入微信读者群,与万千网工共同学习Python知识
★ 更有作者亲自指导,为网络工程师营造“自学自驱”学习氛围
第7章
TextFSM详解
在第1版出版后,我们收到了很多读者朋友们的积极反馈。其中,一个重要反馈集中在国产设备的联机适配问题上,即在思科设备上的操作,是否可以,以及如何才能迁移适配到国产设备上?于是,我们在第2版增加了国产设备适配的内容。这部分虽以华为设备做示例,但实际上也可覆盖至其他国产品牌设备。另一个重要反馈集中在登录设备抓取回显报文后如何能快速有效地解析,诸如ntc-templates中涉及国产设备的模板少之又少。于是,我们在第2版专门安排一章,介绍一个强大的文本解析工具——TextFSM,旨在通过几个实战案例练习后,读者朋友们可按自己的需求自制模板,从而有效地开展联机解析或离线解析。
TextFSM是Google开发的一个用来处理网络设备输出信息的第三方库,旨在通过以匹配自定义模板的方式,将无规律文本内容打造成自己想要的有序数据格式,方便操控数据。虽然TextFSM设计之初旨在解析网络设备输出,但实际上其可应用的范围非常广,可以处理任何文本类信息,比如邮件内容、短信内容。
TextFSM允许我们制作模板来解析设备配置,“成块”处理指令回显。因此,使用TextFSM要比传统的逐行读取解析等方法方便很多。此外,模板对处理套路还有累积沉淀效应,分享起来也很方便,拿到别人写的模板,等于前人给你造了轮子;分享自己制作的模板,等于你给后人造了轮子。这里顺便提一下,我们使用TextFSM联动思科等国外厂商设备时,往往还会辅助使用另一个第三方库——ntc-templates。该库是network To Code团队用TextFSM花费了无数心血开发出来的一套模板集,可以理解成有一个造轮子的厂。但目前在ntc-templates中,鲜有国产设备的相关模板,因此本章不重点介绍。正因为ntc-templates支持国产品牌的模板很少,本章就以华为设备举例。既然没有现成的轮子,那么我们更有理由自己学习TextFSM的基本用法,写出自己想要的模板来。
学习TextFSM之前,能知道一点正则表达式基础知识会更好些;当然,没有正则表达式基础则兼顾学习起来即可。从理论上讲,TextFSM能解决的问题,正则表达式都能解决。但是,TextFSM使用起来会比正则表达式简化且清晰,可以有效屏蔽过于复杂的正则规则,相应的Python代码量会大幅降低。学习某个陌生的Python第三方模块,一个有效途径就是看具体案例教程和实战总结分享,另一个有效手段则是直达官网,查阅官网文档。官网手册为原汁原味的第一手材料,能原文阅读则效果更佳。参考案例教程(比如本章)了解实战,并逐步探索官网手册,两者结合起来,这就是我们推荐的学习路径。
为避免行文冗长和表述枯燥,我们不安排专门的TextFSM模板基础语法介绍章节,而直接通过实验切入,逐层带入常用语法点,并逐步引导读者能自己在官方手册中进行信息检索,从而掌握该库的使用。好了,我们开始吧!
7.1 TextFSM的安装及引例
7.1.1 TextFSM的安装
本章节在Windows 10上开展实验。我们先安装TextFSM库,之后通过一个小例子作为引入,同时展示一下TextFSM的魅力。
pip3 install textfsm
安装过程比较简单,与其他第三方模块类似,在本书前面章节已多次提及,这里不再赘述。
C:\>pip show textfsm
Name: textfsm
Version: 1.1.3
Summary: Python module for parsing semi-structured text into python tables.
Home-page: https://github.com/google/textfsm
Author:
Author-email:
License: Apache License, Version 2.0
Location: c:\program files\python310\lib\site-packages
Requires: future, six
Required-by: netmiko, ntc-templates
从上述信息,我们可以获得当前安装的TextFSM版本、官网地址、依赖包等信息。在你阅读时,TextFSM版本或许已有差异,但基本知识通常不会有太大变化。
7.1.2 TextFSM引例类比
TextFSM初看复杂,我们先用一个“简单”例子,结合日常生活、生产场景做知识迁移,串讲一下TextFSM到底是干吗的、能怎么用,以便快速入门。
我们把整个Python环境下TextFSM引擎解析的过程,类比成一个生产车间生产产品的过程,来一点点剖析。
1. 生产车间(生产原料)
找一台华为数通设备,CLI上执行tracert跟踪指令,获取回显信息,如下所示。
<R1>tracert 192.5.5.5
tracert 192.5.5.5
traceroute to 192.5.5.5(192.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C to break
1 36.1.1.6 60 ms 50 ms 10 ms
2 67.1.1.7 100 ms 90 ms 80 ms
3 78.1.1.8 90 ms 80 ms 60 ms
4 59.1.1.9 100 ms 90 ms 80 ms
5 59.1.1.5 90 ms 100 ms 60 ms
此时,不用关心实际组网与拓扑,聚焦这个交互报文即可。在Python中,它就是一个字符串数据(str类型)。通常,对网络工程师而言,此类信息要么是设备配置数据,要么是指令回显内容。我们把这些信息当成“生产原料”。
2. 生产车间(生产模具)
“生产原料”有了,就要出产品,就得有“生产模具”辅助成型。在TextFSM中,“生产模具”也叫“模板”。模板也是文本信息,同样可以放入文本文件中。
Value ID (\d+)
Value Hop (\S+)
Start
^ ${ID} ${Hop} +\d+ -> Record
3. 生产车间(生产机器)
生产原料、生产模具都到齐后,自然得把“生产机器”搬上来。“生产机器”其实就是Python代码!具体的代码这里先按下不表,后面再安排它出场。
总结一下,在某生产车间中,一批不锈钢板被送入生产机器,配合着不同的模具,“咔咔咔”变成各种不锈钢零件。这样的类比,你能不能有点感性认识了呢?
· 不锈钢板(“生产原料”)→设置配置、指令回显(待匹配字符串、输入文本)。
· 不同模具(“生产模具”)→TextFSM模块。
· 生产工具(“生产机器”)→Python脚本。
温馨提示:请使用浙江图书馆的读者帐号和密码进行登录