YANG:如何在没有键的情况下为嵌套列表配置数据建模

问题描述 投票:0回答:1

我正在尝试为此配置文件构建YANG模型,该文件包含没有键的列表。但是,由于杨列表中关键的必要性,我无法建立精确的杨模型。有没有想法如何在没有键的情况下代表列表列表。

该文件包含acls,其中可能有许多acl,如acl1,acl2由用户命名,并具有如下例所示的规则。

acls:
  acl1:
  - rule:
      nw_src: 192.168.1.1/24  
      actions:
        allow: 1
  - rule:
      actions:
        allow: 0
  acl2:
  - rule:
      nw_src: 192.168.1.1/24  
      actions:
        allow: 0
  - rule:
      actions:
        allow: 1

我的杨模特是

list acls{
     description "list of acls ";
      key "acl-name";
      ordered-by user;
      leaf acl-name {
        type string {
          length "1..64";
        }
      }
 list acle {
      description "This is a list of users in the system.";
      key "acle-name";
      ordered-by user;
      leaf acle-name {
        type string {
          length "1..64";
        }
        description
          "The name of access-list. A device MAY restrict the length
           and value of this name, possibly space and special
           characters are not allowed.";
      }

      container actions {
        description "actions for this acl entry ";    
        leaf allow {
          type uint8;
         }              
      } // end actions container       
   container match{
        description "match fields for this acl entry ";
    leaf nw_src{
         type inet:ipv4-address;
         }
    }
 }//match cont
 }//acle
} //acls

因此,相应的有效数据文件具有YANG所需的额外字段,但在我的原始配置文件中不存在,如(aclname,acle,aclename)。

acls:
  acl1:
    aclname: acl1
    acle:
      rule11:
        aclename: rule11
        nw_src: 192.168.1.1/24
        actions:
          allow: 1
      rule12:
        aclename: rule12
        actions:
          allow: 0
  acl2:
    aclname: acl2
    acle:
      rule21:
        nw_src: 192.168.1.1/24    
        aclename: rule21
        actions:
          allow: 0
      rule22:
        aclename: rule22
        actions:
          allow: 1
validation data-modeling ietf-netmod-yang ietf-netconf
1个回答
1
投票

RFC7950, 7.8.2. The list's "key" Statement

如果列表表示配置并且可能存在,则必须存在的“key”语句将参数作为参数,该字符串指定该列表的一个或多个叶标识符的以空格分隔的列表。叶子标识符不得在密钥中出现多次。每个这样的叶标识符必须引用列表的子叶。叶子可以直接在列表的子语句中或在列表中使用的分组中定义。

密钥中指定的所有叶子的组合值用于唯一地标识列表条目。创建列表条目时,必须为所有密钥叶提供值。因此,将忽略密钥叶中的任何默认值或其类型。密钥叶中的任何“强制”语句都将被忽略。

模型配置数据(无论是否嵌套)的列表必须具有密钥。没有办法解决这个问题,因为每个配置列表实例必须是唯一可识别的,因此像instance-identifiers这样的结构可以按预期工作。如果没有密钥,您将很难告诉设备修改(甚至简单地获取)配置中的特定条目。因此,你提出要做的事情是不可能实现的 - 这不是杨的方式。

只有状态数据(config false;)列表可能没有密钥,因为它们不必以标准方式进行修改 - 它们的实例化/修改/删除由设备的实现细节控制。

此外,您已经在示例中使用了键。 “acl1”和“acl2”显然是“acl”列表的实例,其密钥被编码到其名称中。

© www.soinside.com 2019 - 2024. All rights reserved.