在运行 Junos OS 的设备上使用自定义 YANG RPC
您可以添加 YANG 数据模型,用于在运行 Junos OS 的受支持的设备上定义自定义 RPC。创建自定义 RPC 可让您精确定义输入参数和操作以及这些设备上特定操作任务的输出字段和格式。
要将 RPC 添加至运行 Junos OS 的设备,请下载定义 RPC 的 YANG 模块以及设备中所需的任何操作脚本,然后通过发出 request system yang add
或操作命令将文件添加到新的或 request system yang update
现有 YANG 包中。有关在运行 Junos OS 的设备中添加 YANG 模块的详细信息,请参阅 管理运行 Junos OS 的设备上的 YANG 软件包、模块和脚本。
从 Junos OS 17.3R1 版开始,当您将自定义 YANG 数据模型加载到设备上时,您无需显式加载任何必要的 Junos OS 扩展模块。在早期版本中,您必须为使用该模块的任何软件包加载 Junos OS 扩展模块。
将模块和操作脚本添加到设备后,只要 RPC 定义包含 junos:command
语句或远程执行 RPC,即可在本地执行 RPC。要在 Junos OS CLI 中执行 RPC,请发出由 RPC 语句定义的 junos:command
命令。要远程执行 RPC,请在 RPC 请求操作中使用 RPC 名称。
请考虑以下 YANG 模块和 RPC 定义:
module sw-info { namespace "http://yang.juniper.net/examples/rpc-cli"; prefix rpc-cli; import junos-extension { prefix junos; } rpc get-sw-info { description "Show software information"; junos:command "show sw-info" { junos:action-execute { junos:script "sw-info.py"; } } input { leaf routing-engine { type string; description "Routing engine for which to display information"; } ... } output { ... } } }
从 Junos OS 17.3 版开始,该 action-execute
语句是以下部分的子状态 command
。在早期版本中 action-execute
,和 command
语句放置在同一级别,并且语 command
句是可选的。
要在 Junos OS CLI 中执行此 RPC,请发出 show sw-info
语句定义的 junos:command
命令,并包括任何必要的或可选的输入参数。例如:
user@host> show sw-info routing-engine re0
要远程执行此 RPC,请发送使用 RPC 名称进行请求标记的 RPC 请求,并包含任何必需或可选的输入参数。
<rpc> <get-sw-info> <routing-engine>re0</routing-engine> </get-sw-info> </rpc>
执行自定义 RPC 时,设备会调用语句中 junos:script
定义的操作脚本,此示例中 sw-info.py 脚本。RPC 的操作脚本应为该 RPC 的输出发出任何必要的 XML 元素。
在 Junos OS CLI 中执行 RPC 时,设备 junos:command
将使用 RPC 定义的 CLI 格式显示 RPC 输出(如果有)。如果 RPC 未定义 CLI 格式,则设备不会显示 CLI 中该 RPC 的任何输出。但是,您仍可通过附加 | display xml
命令在 CLI 中显示 RPC 的 XML 输出。
user@host> show sw-info routing-engine re0 | display xml
远程执行 RPC 时,RPC 输出默认用于 XML。但是,您可以指定不同的输出格式, format
方法是将属性包含在 RPC 的开口请求标记中。要显示 CLI 格式,只要 RPC 定义此格式,请将属性设置 format
为 text
或 ascii
。要在 JavaScript 对象符号 (JSON) 中显示输出,请将属性设置 format
为 json
。例如:
<rpc> <get-sw-info format="text"> <routing-engine>re0</routing-engine> </get-sw-info> </rpc>