7.15. “动作”声明

action”语句用于定义连接到特定容器或列表数据节点的操作。它有一个参数,它是一个标识符,后面是一个包含详细动作信息的子语句块。参数是动作的名称。

action”语句在模式树中定义一个动作节点。在action节点下,还定义了名称为“input”的模式节点和名称为“output”的模式节点。节点“input”和“output”在模块的命名空间中定义。

action不能在rpc,另一个action或通知中定义,即action节点不能在模式树中有一个rpcaction或通知节点作为其祖先之一。例如,这意味着如果在通知定义中使用在其节点层次结构中某处包含某个操作的分组,则这是一个错误。

一个action不能有一个没有“key”语句的列表节点的祖先节点。

由于无法在模块的顶层或“case”语句中定义操作,因此如果在模块的顶层使用包含其节点层次结构顶部的操作的分组,则会出错一个案例的定义。

actionrpc之间的区别在于action绑定到数据存储中的节点,而rpc不是。当一个action被调用时,数据存储中的节点与action名称和输入参数一起被指定。

7.15.1. action子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | description | 7.21.3 | 0..1 |
  5. | grouping | 7.12 | 0..n |
  6. | if-feature | 7.20.2 | 0..n |
  7. | input | 7.14.2 | 0..1 |
  8. | output | 7.14.3 | 0..1 |
  9. | reference | 7.21.4 | 0..1 |
  10. | status | 7.21.2 | 0..1 |
  11. | typedef | 7.3 | 0..n |
  12. +--------------+---------+-------------+

7.15.2. NETCONF XML编码规则

当一个action被调用时,名字空间“urn:ietf:params:xml:ns:yang:1”中的本地名称为“action”的元素(见第5.3.1节)被编码为子XML元素, [RFC6241]中定义的<rpc>元素,如[RFC6241]中的替换组“rpcOperation”所指定的。

<action>元素包含标识数据存储区中节点的节点层次结构。它必须包含从顶层到包含动作的列表或容器的直接路径中的所有容器和列表节点。对于列表,所有关键叶子也必须包括在内。最内层的容器或列表包含一个XML元素,其中包含已定义操作的名称。在这个元素中,输入参数被编码为子XML元素,其顺序与“input”语句中定义的顺序相同。

一个<rpc>中只能调用一个action。如果<rpc>中存在多个action,则服务器必须在<rpc-error>中回答“bad-element<error-tag>

如果操作调用成功并且没有返回输出参数,则<rpc-reply>包含在[RFC6241]中定义的单个<ok/>元素。如果返回输出参数,则按照在“output”语句中定义的顺序,将它们作为子元素编码到[RFC6241]中定义的<rpc-reply>元素。

7.15.3. 使用示例

以下示例定义一个操作来重置服务器集群中的一台服务器:

  1. module example-server-farm {
  2. yang-version 1.1;
  3. namespace "urn:example:server-farm";
  4. prefix "sfarm";
  5. import ietf-yang-types {
  6. prefix "yang";
  7. }
  8. list server {
  9. key name;
  10. leaf name {
  11. type string;
  12. }
  13. action reset {
  14. input {
  15. leaf reset-at {
  16. type yang:date-and-time;
  17. mandatory true;
  18. }
  19. }
  20. output {
  21. leaf reset-finished-at {
  22. type yang:date-and-time;
  23. mandatory true;
  24. }
  25. }
  26. }
  27. }
  28. }

完整rpcrpc-reply的相应XML实例示例:

  1. <rpc message-id="101"
  2. xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  3. <action xmlns="urn:ietf:params:xml:ns:yang:1">
  4. <server xmlns="urn:example:server-farm">
  5. <name>apache-1</name>
  6. <reset>
  7. <reset-at>2014-07-29T13:42:00Z</reset-at>
  8. </reset>
  9. </server>
  10. </action>
  11. </rpc>
  12. <rpc-reply message-id="101"
  13. xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  14. <reset-finished-at xmlns="urn:example:server-farm">
  15. 2014-07-29T13:42:12Z
  16. </reset-finished-at>
  17. </rpc-reply>