3

我正在学习 OpenDayLight 和 Yang,但不知道如何对叶节点施加约束。我有一个叶节点(vpn-id)。当 l3vpn 类型节点等于“bgp”时,我希望这个节点的数据允许用于 vpn-id。如果叶节点不等于'bgp'并且输入了vpn-id,我想抛出一个错误。我在 OpenDayLight 中对此进行了测试,无论数据中有什么,它总是允许我保存数据。

另外,我很难找到杨的例子,这样我就可以自学了。欢迎提出建议。

module DaveTest {
 namespace "urn:aaa:ddd:DaveTest";
 prefix dave-module;

 description "Dave testing file";

 revision "2017-04-17" {
      description "Initial version.";
 }

 container testing-vars {

      list test-list {

           key "vpn-transaction-id l3vpn-type";
           unique "vpn-transaction-id";

           leaf vpn-transaction-id {
                type string;
           }

           leaf l3vpn-type {
                type enumeration {
                     enum "bgp";
                     enum "static";
                     enum "gre tunnel";
                }
                mandatory true;
           }

           leaf vpn-id {
                when "../l3vpn-type = 'bgp'";
                type string;
           }
      }              
 }
4

2 回答 2

0

您对when语句的使用是正确的。您已经设置了条件,因此它仅在值为vpn-id时才允许出现。由于 ODL 中的错误,它可能无法按预期工作。l3vpn-typebgp

如果您想了解 YANG,阅读标签 wiki 将是一个好的开始(底部有链接)。可以在网上找到各种组制作的 YANG 模块的存储库,例如这个。也许阅读标准模块会是一个更好的开始,因为它们经过同行评审并遵循 YANG 作者的指导方针。它们可以在已发布的 RFC中找到,通常其名称包含“YANG data model for”短语。

于 2017-04-25T05:56:37.863 回答
0

您可以添加 must 语句,如下所示:

leaf vpn-id {
    must "../l3vpn-type = 'bgp'";
    type string;
}
于 2021-01-26T09:33:59.247 回答