我正在尝试为此配置文件构建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
答案 0 :(得分:1)
RFC7950, 7.8.2. The list's "key" Statement
" key"声明,如果列表代表必须存在 配置和可能存在,否则,作为参数a string,指定一个或多个叶子的空格分隔列表 此列表的标识符。叶标识符不得出现更多 钥匙比一次。每个这样的叶子标识符必须参考a 列表的子叶。叶子可以直接定义 列表中的子语句或列表中使用的分组。
使用密钥中指定的所有叶子的组合值 唯一标识列表条目。所有关键叶子必须给出值 何时创建列表条目。因此,键中的任何默认值 叶子或它们的类型被忽略。任何"强制性"中的陈述 关键叶子被忽略了。
列出模型配置数据(无论是否嵌套)必须具有密钥。没有办法解决这个问题,因为每个配置列表实例必须是唯一可识别的,因此像instance-identifiers
这样的结构可以按预期工作。如果没有密钥,您将很难告诉设备修改(甚至简单地获取)配置中的特定条目。因此,你提出要做的事情是不可能实现的 - 这不是杨的方式。
只有状态数据(config false;
)列表可能没有密钥,因为它们不必以标准方式进行修改 - 它们的实例化/修改/删除受设备实现细节的控制。
此外,您已经在示例中使用了密钥。 " acl1"和" acl2"显然是" acl"列表,其密钥已编码到其名称中。