网络自动化配置文本解析

Posted by locus on 2020-01-05

配置解析背景

无论你是否同意,网络领域持续很多年并没有通用管理方式,各网络厂商依然通过命令行(CLI),网络的整个业务部署依然通过传统的CLI方式,之前看过一篇文章,对于Cisco的cli,传统的ios命令与30年前(1989年)几乎差不太多。
没有API,接口不一致,配置和运行时CLI格式受限于各厂商或各产品类型。这意味着,无论你如何讨厌传统的ssh cli抓取和正则表达式,但它仍然是最有效的方式。在本文中,我将深入探讨当前形势下的一些解析工具,这些工具将帮助您以最少的正则表达式来实现网络自动化目标,而正则表达式的数量又将导致工作量最小。

在深入研究之前确定的一点是,关于配置解析有两个不同的方向。

首先,从半结构化文本输出中提取结构化数据。这一般用于自动化资产扫描、配置审计、自动化拓扑等分析与存储的作用。

其次,获取结构化数据并将该数据馈送到模板引擎,以便从中生成一些信息(考虑使用Jinja2模板生成配置)。这一般用于自动化配置下发,配置生成等。

这篇文章正在讨论前者,既从配置中提取结构化的数据。

Template Text Parser(TTP)

模板文本解析器(ttp)是最新的基于Python的解析模块,我非常喜欢它。它简单易用,但如果您需要解析更复杂的内容,则需要深入进行一些实验与认真看一下文档。

如果您熟悉Jinja2模板语言,那么您会喜欢ttp。将其视为反向Jinja2模板(在技术上与Jinja2不相似,但在语法上相似)。这是从文档的一个简单示例,以解析来自思科设备的接口数据。

总的来说,我真的很喜欢Template Text Parser。我认为这是对网络自动化工具箱的一个受欢迎的补充。我可以看到使用ttp从现有配置中提取数据并构建一个数据结构,该数据结构随后可以用作使用Jinja2模板生成配置的输入。

NTC Templates

Network To Code开发了一个相当强大的TextFSM解析器库,称为ntc-templates。这些模板可以直接在您的代码中使用,也可以从Netmiko等库中使用。

Netmiko的NTC模板功能

通过ntc-Template与netmiko进行集成,可以灵活的编写TextFSM的模块

NAPALM

NAPALM是一个库,用于为网络提供一致的,与供应商无关的API。它支持许多不同的设备类型,并具有与交互和管理实时网络有关的许多功能。但是,由于这是一篇有关解析的重点文章,所以我们只关注NAPALM的getters。这些get方法以标准格式提取运行时信息。示例getters是get_arp_table,get_facts等等。这是所有受支持的列表getters。

未来会如何

我希望少正则表达式RE。总而言之,文本解析(和正则表达式)是必不可少的,但是有很多很棒的工具可用。您会注意到,上面的大多数示例完全不需要使用正则表达式。利用正确的工具进行下一步工作,我们所有人都可以专注于我们在这里要做的事情,管理网络,希望这篇文章可以作为那里可用工具及其使用方法的相当完整的快照。