我有一个带有leafref的杨模型,它指向另一个列表中的一个列表。基本上是这样的:
list some-names
{
key "name";
leaf name
{
type string;
}
list some-other-names
{
key "name";
leaf name
{
type string;
}
}
}
我想用 leafref 从外面指向some-other-names
列表,但只有那些名字较高的列表等于 foo。不幸的是,leafref 必须有一个限制current()
。所以我目前的解决方案如下,但需要一个额外的叶子对于配置 是完全不必要的。
leaf foo
{
type string;
deafault "foo";
}
leaf some-leaf-ref
{
type leafref
{
path "/some-names[name = current()/../foo]/some-other-names/name";
}
}
有没有比这更简单的方法,它不需要额外的叶子来将some-names
的名称限制为某个值?
顺便说一句,我已经尝试过了,但它不是一个正确的路径参数:
leaf some-leaf-ref
{
type leafref
{
path "/some-names[name = 'foo']/some-other-names";
}
}
这样的:
leaf some-leafref {
must "/some-names[name = 'foo']/some-other-names/name = .";
type leafref {
path "/some-names/some-other-names/name";
}
}
因此,path
表达式中没有谓词,但有一个额外的must
限制 - 这两个表达式本质上是 AND 在一起的。YANG 规范确实提到路径表达式的计算结果可能是包含多个节点的节点集,并且它没有说每个键的谓词是强制性的(与 instance-identifiers
不同(。不过,对我来说似乎是黑客行为,或者至少是丑陋的。
也许你真正想要的是一个叶子到你的外list
(some-names
(,它有一个when
,使其仅在../name = 'foo'
时有效。
list some-names {
key "name";
leaf name {
type string;
}
list some-other-names {
key "name";
leaf name {
type my-type;
}
}
leaf some-leafref {
when "../name = 'foo'";
type leafref {
path "../some-other-names/name";
}
}
}