YANG模型when语句括号支持及and/or运算符使用咨询
YANG when语句语法及对应配置修正
when语句是否支持括号
支持。YANG的when语句内使用XPath 1.0标准语法,括号可正常使用,作用与通用编程语言一致:显式划定逻辑运算分组,指定运算优先级,避免默认优先级导致的逻辑错误。
and、or运算符的正确使用方式
- 优先级规则:XPath 1.0中
and优先级高于or,无括号时表达式会优先计算所有and连接的判断条件,再计算or连接的条件 - 语义规则:
条件1 and 条件2:两个条件同时为真时,整体判断才成立条件1 or 条件2:任意一个条件为真时,整体判断就成立
- 实践要求:同一when表达式中同时存在
and和or时,必须用括号对同组逻辑做显式包裹,哪怕你明确知道优先级规则,也能避免后续维护时出现逻辑误读。
对应需求的配置修正
你的需求逻辑为:同时满足以下两个条件时,leaf节点生效:
- 上层节点
enable-L3-access取值为false(禁用L3访问) - 同层
traffic-type取值为Transport single vlan,或同层traffic-types取值为Transport single vlan
你原有配置的问题是将两个流量类型的判断用and连接,要求两个节点同时取对应值才会生效,和需求不符。正确配置如下:
leaf VLAN-normalization { type enumeration { enum "Normalize to Dot1q tag"; enum "Normalize to QinQ tags"; enum "Normalize to VLAN none"; enum "Normalize not required"; } when "../../enable-L3-access = 'false' and (../traffic-type = 'Transport single vlan' or ../traffic-types = 'Transport single vlan')"; }
补充说明:如果
traffic-type和traffic-types是互斥存在的兼容节点(同一时间只会出现一个),上述写法可直接使用;如果存在两个节点都未配置的场景,现有写法也可正常匹配,不会出现非预期生效的问题。
内容的提问来源于stack exchange,提问作者Ranjith Poojary
相关产品推荐
相关产品推荐

