Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

在 YANG 中为运行 Junos OS 的设备创建自定义 RPC

瞻博网络提供 YANG 模块,用于定义 Junos OS 操作命令的远程过程调用 (RPC)。从 Junos OS 版本 16.1R3 开始,您还可以创建 YANG 数据模型,为运行 Junos OS 的受支持的设备定义自定义 RPC。创建自定义 RPC 可让您精确定义输入参数和操作以及这些设备上特定操作任务的输出字段和格式化。使用自定义 YANG RPC 扩展操作命令层次结构时,还必须提供用作 RPC 处理器的操作脚本。RPC 定义引用执行 RPC 时调用的操作脚本。

本主题概述了创建 YANG 模块的常规步骤,该模块定义了运行 Junos OS 的设备的自定义 RPC。有关创建 RPC 操作脚本和自定义 RPC CLI 输出的信息,请参阅 在运行 Junos OS 的设备上为 YANG RPC 创建操作脚本了解用于格式化 RPC 输出的 Junos OS YANG 扩展

本节为 YANG 模块提供了一个通用模板,用于为运行 Junos OS 的设备定义 RPC。之后,模板详细解释了模板中的不同部分和语句。

RPC 在模块内定义。模块名称应具有描述性,并指示该模块中包含的 RPC 的常规用途,并且模块名称空间必须为唯一。

注意:

根据 RFC 6020YANG - 网络配置协议 (NETCONF) 的数据建模语言,模块名称和模块所在文件的基本名称必须相同。例如,如果模块名称为 get-if-info,模块的文件名必须为 get-if-info.yang

该模块必须导入 Junos OS DDL 扩展模块并定义前缀。扩展模块包含在运行 Junos OS 的设备上执行的 RPC 定义中所需的 YANG 扩展。

注意:

从 Junos OS 17.4R1 版开始,Junos OS YANG 模块对模块的名称、文件名和名称空间使用新的命名约定。

如果模块中的任何 RPC 呈现格式化的 ASCII 输出,则模块必须导入 Junos OS ODL 扩展模块并定义前缀。ODL 扩展模块定义了 YANG 扩展,当您在 CLI 中执行该 RPC 的操作命令时,或者当您以文本格式请求 RPC 输出时,您可以使用该扩展来精确指定如何呈现输出。

包括负责该模块的组织以及该模块的说明。

在模块中,您可以定义一个或多个 RPC,每个 RPC 都有一个唯一的名称。RPC 名称用于远程执行 RPC,因此应明确指示 RPC 的目的。RPC 的目的可在语句中 description 进一步澄清。如果还定义了 RPC 的 CLI 命令,则 CLI 将显示该命令列表的上下文敏感型帮助中的 RPC 说明。

在 RPC 定义中,定义commandaction-executescript和语句,即 Junos OS DDL 扩展语句。该command语句定义了用于在 Junos OS CLI 中执行 RPC 的操作命令。要远程执行 RPC,请使用 RPC 名称获取请求标记。

action-execute 句和 script 子状态必须针对每个 RPC 进行定义。子 script 状态定义了执行 RPC 时调用的操作脚本的名称。您必须为每个 RPC 定义一个操作脚本,并且仅定义一个操作脚本。

注意:

从 Junos OS 17.3 版开始,该 action-execute 语句是以下部分的子状态 command。在早期版本中 action-execute ,和 command 语句放置在同一级别,并且语 command 句是可选的。

  • 在 Junos OS 17.3 及更高版本中,定义语 command 句及其子状态。

  • 在 Junos OS 17.2 版及更低版本中 action-execute ,定义和 script 语句,并可选择定义语 command 句。

注意:

您必须将 YANG 模块和操作脚本添加至设备,作为新或现有 YANG 软件包的一部分,方法是发出 request system yang addrequest system yang update 命令。因此,您只需要提供语句的名称,而非操作脚本的 junos:script 路径。

注意:

如果您的操作脚本写在 Python 中,则必须在执行脚本的每个设备的层次结构级别下[edit system scripts]配置language pythonlanguage python3语句,以便设备执行未签名的 Python 脚本。

RPC 操作的输入参数在可选 input 语句中定义。执行 RPC 时,Junos OS 会调用 RPC 的操作脚本并将所有输入参数传递至脚本。

注意:

从 Junos OS 版本 19.2R1 开始,自定义 YANG RPC 在 Junos OS CLI 中执行 RPC 命令时支持类型的 empty 输入参数。在早期版本中,只有在 NETCONF 或 Junos XML 协议会话中执行 RPC 时,才支持类型的 empty 输入参数。

可选 output 语句将输出参数括起来用于 RPC 操作。该 output 语句可包含一个顶级 root 容器。将 root 容器名称与 RPC 名称关联是一个很好的做法。例如,如果 RPC 名称为 get-xyz-information,容器名称可能是 xyz-information。语句的 output 子陈述定义了 RPC output 节点下的节点。在 XML 输出中,这将转换为元素下的 <rpc-reply> XML 元素。

在 root 容器中,您可以包括 leafcontainer 语句。叶语句描述该容器的 RPC 输出中包含的数据。

默认情况下,RPC 输出的格式为 XML。您还可以定义格式化的 ASCII 输出,当您在 CLI 中执行该 RPC 的操作命令或以文本格式请求 RPC 输出时显示。

注意:

从 Junos OS 17.3 版开始,用于自定义 RPC 的 CLI 格式在扩展语句中 junos-odl:format 定义。在早期版本中,CLI 格式使用包含语句的 junos-odl:cli-format 容器进行定义。

  • 从 Junos OS 17.3 版开始,您可以定义 junos-odl:format 语句(即 Junos OS ODL 扩展语句)来定义 CLI 格式。

  • 在 Junos OS 版本 17.3 之前,您可在包含语句的儿童容器中定义给定容器的 junos-odl:cli-format CLI 格式。

在定义 CLI 格式的语句或容器中,您可以使用 Junos OS ODL 扩展模块中定义的语句自定义 RPC 的 CLI 输出。有关渲染格式化 ASCII 输出的详细信息,请参阅 自定义运行 Junos OS 的设备上的 YANG RPC 输出。您也可规定在 RPC 的 CLI 输出中排放特定容器中的数据时。有关为同一 RPC 构建不同输出级别的信息,请参阅 为运行 Junos OS 的设备的自定义 YANG RPC 定义不同级别的输出

要在运行 Junos OS 的设备上使用 RPC:

  • 将模块和操作脚本下载到设备
  • 通过发出或操作命令将文件添加到新的或request system yang update现有 YANG 包中request system yang add
  • 执行 RPC
    • 要在 CLI 中执行 RPC,请发出 语句定义的 junos:command 命令。
    • 要远程执行 RPC,请在 RPC 请求操作中使用 RPC 名称。
注意:

从 Junos OS 17.3R1 版开始,当您将自定义 YANG 数据模型加载到设备上时,您无需显式加载任何必要的 Junos OS 扩展模块。在早期版本中,您必须为使用该模块的任何软件包加载 Junos OS 扩展模块。

在 CLI 中执行 RPC 时,设备将显示由 RPC 定义 junos:command 的 CLI 格式的 RPC 输出。如果 RPC 未定义 CLI 格式,默认情况下,CLI 中的该 RPC 不显示任何输出。但是,通过将过滤器附加到 命令,您仍然可以显示 CLI 中该 RPC 的 | display xml XML 输出。

有关 YANG RPC 的详细信息,请参阅 RFC 6020YANG - 网络配置协议 (NETCONF) 的数据建模语言以及相关 RFC。

发布历史记录表
释放
描述
19.2R1
从 Junos OS 版本 19.2R1 开始,自定义 YANG RPC 在 Junos OS CLI 中执行 RPC 命令时支持类型的 empty 输入参数。
17.3R1
从 Junos OS 17.3 版开始,该 action-execute 语句是以下部分的子状态 command
17.3R1
从 Junos OS 17.3 版开始,用于自定义 RPC 的 CLI 格式在扩展语句中 junos-odl:format 定义。
17.3R1
从 Junos OS 17.3R1 版开始,当您将自定义 YANG 数据模型加载到设备上时,您无需显式加载任何必要的 Junos OS 扩展模块。