YANG中refine约束grouping未触发错误的问题排查
问题原因及解决方案
核心原因
你遇到的问题主要出在XPATH表达式的上下文理解错误:
当在refine feathers-count内部定义must语句时,表达式中的.指向的是feathers-count这个leaf节点本身(XML元素节点),而非节点存储的数值内容。部分YANG验证工具无法正确将节点对象转换为数值进行比较,导致约束逻辑失效。
另外还有一个潜在的规范问题:你定义的feathers-count类型为uint8,但设置了range "0..3000"——uint8的原生取值范围是0~255,这个range约束本身是无效的,会被YANG编译器忽略,建议改成uint32类型来适配你的取值需求。
修复方案
方案1:修正refine内的must表达式
明确通过number(.)将节点转换为数值后再比较:
uses bird-config { refine feathers-count { must 'number(.) = 3000' { error-message "Invalid number of feathers"; } } }
方案2:将must约束移至uses层级
直接在uses语句下定义must,上下文指向当前节点,表达式更直观可靠:
uses bird-config { must 'feathers-count = 3000' { error-message "Invalid number of feathers"; } }
额外提醒
记得修正feathers-count的类型或range,使其符合YANG规范:
leaf feathers-count { type uint32 { range "0..3000"; } mandatory true; description "[adapted from IETF BIRD model RFC 0000] The number of feathers."; }
内容的提问来源于stack exchange,提问作者IPbean
相关产品推荐
相关产品推荐

