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参数会启用严格模式,检查得更细致。比如:
- 类型定义是否完整
- 引用路径是否正确
- 命名空间是否冲突
- 叶子节点是否有默认值冲突
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模型的完整流程。你可以把它当作操作手册来用:
4.6 实战:一个完整的检查流程
假设你有一个接口配置模型 if-config.yang,完整的检查流程是这样的:
- 语法检查:
pyang --strict if-config.yang - 查看树形结构:
pyang -f tree if-config.yang - 生成HTML文档:
pyang -f yang if-config.yang -o if-config.html - 生成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声明是否匹配 |
嗯,工具链这部分就讲到这里。记住一个原则:先检查,后使用。别像我当年那样,等到上线前才发现问题。