为CLI命令eid-record-provider编写YANG Must验证语句
验证
eid-record-provider instance-id的YANG Must语句实现 嘿,结合你给出的CLI配置场景,我来帮你写出满足需求的YANG Must语句——核心就是确保eid-record-provider指定的instance-id,已经在某个site节点下的eid-prefix里配置过。
首先先把你的CLI配置对应到合理的YANG结构(基于CLI命令推断):
container router { container config { // 对应site site123、site345这类配置节点 list site { key "name"; leaf name { type string; } // 每个site下的eid-prefix列表 list eid-prefix { leaf instance-id { type uint32; } leaf prefix { type inet:ip-prefix; } leaf accept-more-specifics { type empty; } } } // 对应extranet ext1这类配置节点 list extranet { key "name"; leaf name { type string; } // 我们要验证的eid-record-provider节点 leaf eid-record-provider { type uint32; // 这里就是要加must语句的地方 } } } }
接下来就是关键的Must语句实现,直接加在eid-record-provider节点里:
leaf eid-record-provider { type uint32; must "boolean(../site/eid-prefix[instance-id = current()])" { error-message "指定的instance-id必须已在某个site的eid-prefix中配置!"; error-app-tag "invalid-unconfigured-instance-id"; } }
简单解释下这个语句的逻辑:
../site/eid-prefix[instance-id = current()]:从当前的extranet节点往上跳一层到config,然后遍历所有site下的eid-prefix条目,找和当前eid-record-provider值相同的instance-id。boolean(...):把XPath的查询结果转成布尔值——只要有匹配的条目就返回true,验证通过;如果完全找不到匹配的,就返回false,触发错误。- 错误信息和标签可以根据你的需求自定义,这样用户在CLI里输入非法instance-id时,能得到清晰的提示。
举个例子:你给出的CLI里,extranet ext1用了instance-id 103,这个id确实在site site123的eid-prefix里存在,所以配置能通过验证;但如果你写成instance-id 105(这个id没在任何site的eid-prefix里配置),就会直接抛出我们定义的错误提示。
内容的提问来源于stack exchange,提问作者user1060517
相关产品推荐
相关产品推荐

