4. YANG工具链:pyang工具使用、YANG语法检查、生成树形视图、生成文档

好,咱们进入正题。YANG模型写好了,怎么验证它对不对?怎么给别人看?这就是工具链要解决的问题。

我个人习惯用pyang,它轻量、稳定,社区活跃。说白了,它就是YANG模型的瑞士军刀——能检查语法、能画树形图、还能生成漂亮的文档。

4.1 pyang工具安装与基础使用

安装很简单,一条命令搞定:

pip install pyang

嗯,这里要注意。如果你在Linux下工作,建议用Python 3.8以上版本。我在项目中遇到过Python 3.6跑pyang报编码错误的情况,折腾了半天才发现是版本问题。

安装完成后,验证一下:

pyang --version

看到版本号输出,就说明装好了。

4.2 YANG语法检查——把错误扼杀在摇篮里

写YANG模型最容易犯什么错?拼写错误、括号不匹配、引用模块路径不对。这些错误在编译时不会报错,但加载到设备上就会出问题。

我曾经在项目交付前夜,发现一个YANG模型里少写了个分号,导致整个网管系统加载失败。从那以后,我每次写完模型都会先跑一遍语法检查。

语法检查命令:

pyang --strict my-model.yang

--strict参数会启用严格模式,检查得更细致。比如:

  • 类型定义是否完整
  • 引用路径是否正确
  • 命名空间是否冲突
  • 叶子节点是否有默认值冲突
避坑指南:我曾经遇到过一个案例,两个模块引用了同一个外部模块的不同版本,pyang会报"module revision mismatch"错误。解决办法是统一版本,或者在import时指定具体版本号。

4.3 生成树形视图——一眼看清模型结构

YANG模型写了几百行,别人看不懂怎么办?树形视图就是最好的沟通工具。

生成树形视图的命令:

pyang -f tree my-model.yang

输出效果像这样:

module: example-interface
  +--rw interface* [name]
     +--rw name          string
     +--rw description?  string
     +--rw enabled?      boolean
     +--rw ip-address?   inet:ipv4-address
     +--rw speed?        enumeration

你看,+--rw表示可读写节点,+--ro表示只读节点,*表示列表。一目了然。

小技巧:如果模型引用了外部模块,可以用--path参数指定搜索路径。比如:pyang -f tree --path /usr/share/yang/modules my-model.yang

4.4 生成文档——让团队协作更高效

文档生成是pyang的强项。它支持多种输出格式:

格式 命令 适用场景
HTML pyang -f yang my-model.yang 在线文档、团队共享
YIN pyang -f yin my-model.yang XML格式,便于程序处理
DSDL pyang -f dsdl my-model.yang 数据验证场景
JSTREE pyang -f jstree my-model.yang 交互式树形视图

我个人最常用的是HTML格式。它会生成一个完整的文档页面,包含模块信息、节点描述、类型定义、引用关系等。你想想看,给客户或者新同事看这个,比看原始YANG代码友好多了。

4.5 知识体系总览

下面这张图,是我用pyang工具链处理YANG模型的完整流程。你可以把它当作操作手册来用:

YANG工具链核心流程 YANG模型文件 pyang 工具引擎 语法检查 --strict 参数 树形视图 -f tree 输出 文档生成 -f html/yin/dsdl pyang 是 YANG 工具链的核心,一个命令完成三种任务

4.6 实战:一个完整的检查流程

假设你有一个接口配置模型 if-config.yang,完整的检查流程是这样的:

  1. 语法检查pyang --strict if-config.yang
  2. 查看树形结构pyang -f tree if-config.yang
  3. 生成HTML文档pyang -f yang if-config.yang -o if-config.html
  4. 生成YIN格式pyang -f yin if-config.yang -o if-config.yin

我的经验:在实际项目中,我会把这三个步骤写成一个shell脚本,每次修改模型后一键执行。这样既能保证质量,又能快速生成交付物。

4.7 常见问题与解决

问题 原因 解决办法
报错"module not found" 引用的模块路径不对 --path指定模块搜索路径
树形视图显示不全 模型嵌套太深 --tree-depth限制显示深度
HTML文档中文乱码 编码问题 确保YANG文件保存为UTF-8格式
语法检查通过但设备报错 设备支持的YANG版本不同 检查yang-version声明是否匹配

嗯,工具链这部分就讲到这里。记住一个原则:先检查,后使用。别像我当年那样,等到上线前才发现问题。


专注资料整理