YANG Deviation调试咨询:如何在must语句中打印XPath值
关于YANG Deviation中must语句调试及生效验证的解答
1. 不能在must语句中直接打印XPath值
YANG的must语句是用于断言校验的语法,本身不支持直接打印输出XPath值的功能。不过你可以通过在error-message中嵌入XPath表达式的计算结果来间接查看目标节点的当前值,修改后的配置示例如下:
deviation "/ns:direction" { description "Deviation to restrict if the direction is left."; deviate add { must ". = 'left'" { error-message "Direction is not left, current value is: '" || . || "'"; description "Direction must be left." ; } } }
当must断言失败时,error-message会显示/ns:direction节点的实际值,以此间接验证XPath是否正确指向了目标节点。
2. 验证偏差是否生效的实用方法
- 使用YANG工具校验:用
pyang或yanglint这类工具,加载原始YANG模块和偏差模块后,传入不符合must条件的配置文件,观察是否触发错误提示。示例命令(yanglint):
若配置了非"left"的direction值,工具会输出你定义的error-message内容。yanglint -d -m original-module.yang deviation-module.yang test-config.xml - 查看服务器日志:如果是在NETCONF服务器(如OpenDaylight、ConfD)中部署,当配置违反must断言时,服务器日志会记录详细错误信息,包含触发断言的节点值。
- 实际配置测试:通过NETCONF客户端发送不符合条件的配置请求,观察服务器返回的rpc-error,里面会包含error-message,以此确认偏差已生效。
关键注意事项
- 确保偏差模块中正确导入了原始模块的命名空间(
ns需在偏差模块的namespace或import语句中准确定义),否则XPath路径会解析失败。 must语句的表达式需明确校验逻辑:你原代码中的表达式为空,要改成实际的校验规则,比如. = 'left'来限制方向必须为left。
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

