限制yang leafref密钥标识符,不需要额外的叶子

时间:2017-03-24 09:25:34

标签: ietf-netmod-yang

我有一个带有leafref的yang模型,它指向另一个列表中的列表。 基本上是这样的:

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的名称限制为某个值?

顺便说一下,我已经尝试了,但它不是正确的路径 - arg:

leaf some-leaf-ref
{
    type leafref
    {
        path "/some-names[name = 'foo']/some-other-names";
    }
}

1 个答案:

答案 0 :(得分:0)

也许有些事情如下:

  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不同)。对我来说似乎是hackery,或者至少是丑陋的。

也许您真正想要的是外部listsome-names)的leafref leaf子项,其when仅在../name = 'foo'时才有效。< / p>

  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";
      }
    }
  }