1

我有一个带有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()for 限制。所以我目前的解决方案如下,但需要一个额外的叶子,这对于配置来说是完全不必要的。

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

1 回答 1

1

也许是这样的:

  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 规范确实提到路径表达式可以评估为包含多个节点的节点集,并且它没有说每个键都必须有谓词(与 for 不同instance-identifiers)。不过,对我来说似乎是骇客,或者至少是丑陋的。

也许您真正想要的是外部list( some-names) 的 leafref 叶子级,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";
      }
    }
  }
于 2017-03-27T08:33:36.113 回答