You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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节点生效:

  1. 上层节点enable-L3-access取值为false(禁用L3访问)
  2. 同层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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:30:05