首页 > 解决方案 > yang 模型中的实例标识符如何?

问题描述

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

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

标签: ietf-netmod-yang

解决方案


实例标识符可以是对系统中任何数据节点的引用。把它想象成一个指针;它不包含数据本身,只是对它的引用(例如地址) 例如,表示对建模为 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)可以作为类型语句的子语句添加,它允许控制是否只能引用现有实例,或者是否也可以接受不存在的实例。


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

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

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


推荐阅读