限制没有额外叶子的杨叶引用密钥标识符



我有一个带有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";
      }
    }
  }

最新更新