【问题标题】:How does instance-identifier looks like in yang model?yang 模型中的实例标识符如何?
【发布时间】:2020-07-04 22:23:06
【问题描述】:

据我了解,实例标识符类型有一个 XPath 语句,它指向某个节点是一棵树。下一步是什么? instance-identifier 如何识别这个节点?如何将实例标识符应用于它指向的节点?还是我完全搞错了... 除了在谷歌中找到的例子,我也没有任何例子,比如

    leaf instance-identifier-leaf {
        type instance-identifier;
    } 

【问题讨论】:

    标签: ietf-netmod-yang


    【解决方案1】:

    实例标识符可以是对系统中任何数据节点的引用。 把它想象成一个指针;它不包含数据本身,只是对它的引用(例如地址) 例如,表示对建模为 YANG 容器或列表实例的对象的引用很有用..

    鉴于 YANG 数据可以表示为 XML 文档,因此“指向”其中特定元素的方式类似于“指向”特定 XML 元素。在 XML 中执行此操作的方式是使用 XPath,它允许使用

    这是一个例子:

       container a {
    
          list b {
             key x;
             leaf x { type int8; }
    
             list c {
                key y;
                leaf y { type int8; }
             }
         }
      }
    
      leaf ref {
        type instance-identifier;
      }
    

    因此,想象一个真实系统的数据存储区包含这些数据(为简化起见,我使用 XML 格式并忽略命名空间;真实系统不需要将其数据存储区保持为 XML 格式):

    <a>
      <b>
        <x>1</x>
      </b>
      <b>
        <x>5</x>
        <c>
          <y>1</y>
        </c>
        <c>
          <y>2</y>
        </c>
      </b>
      <b>
        <x>10</x>
        <c>
          <y>5</y>
        </c>
      </b>
    </a>
    

    所以基本上我们有一堆列表条目,其中一些是级联的。 如果你在 xpath 中表示所有这些节点,你会得到一个列表:

    /a
    /a/b[x=1]
    /a/b[x=5]
    /a/b[x=5]/c[y=1]
    /a/b[x=5]/c[y=2]
    /a/b[x=10]
    /a/b[x=10]/c[y=5]
    

    如果您在此层次结构之外有一个名为 ref 的实例标识符,它可以将这些 xpath 中的任何一个作为可能的值,作为字符串值。所以它包含对这些节点之一的引用;它不会包含节点本身,只是对它的引用。

    最后一点是,instance-identifier 所引用的节点并非必须实际存在于数据存储中;你可以有一个实例标识符指向一个不存在的节点。有一个 yang 语句(requires-instance)可以作为 type 语句的子语句添加,它允许控制是否只能引用现有实例,或者是否也可以接受不存在的实例。


    关于值的格式,请注意实例标识符的表示方式取决于您使用的协议。 NETCONF 中的实例标识符与 RESTCONF 中的实例标识符不同(尽管它们非常相似)。 你可以想象一个 CLI 有一个自定义的方式来表示 YANG 对象,例如:

    • 使用 xpath /a/b[x=5]/c[y=1] 定义数据节点
    • 在 CLI 中,该节点地址被视为 c-5-1(只是一个示例)
    • 如果您有一个指向该对象的实例标识符,它的值在 CLI 中将是字符串“c-5-1”,但在 NETCONF 中它仍然是 xpath。

    简而言之,格式取决于您使用的协议。

    【讨论】:

    • 您能否详细说明 NETCONF 和 RESTCONF 在实例标识符的表示上有何不同? NETCONF 和 RESTCONF 表示中是否有相同实例标识符的示例?
    • RESTCONF 本身支持多种编码类型,尤其是 XML 和 JSON。对于 XML 编码,它的工作方式与 NETCONF 完全相同,例如instance-identifiers 显示为 xpath。但是,对于 JSON 编码,有一点简化;它仍然是 xpath,但鉴于 JSON 中的命名空间并不那么简单,它们大部分都被省略了。关于如何在 JSON 中编码实例标识符的定义在 datatracker.ietf.org/doc/html/rfc7951#section-6.11 中进行了描述,其中包含示例。
    • 感谢@Paulo Gomes
    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多