Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

示例:使用自定义 YANG RPC 检索 Junos 设备上的操作信息

您可以添加 YANG 数据模型,用于定义 Junos 设备上的自定义 RPC。创建自定义 RPC 使您能够精确定义输入参数和操作以及这些设备上特定操作任务的输出字段和格式。此示例显示自定义 RPC 和操作脚本,用于检索设备的操作信息并显示自定义 CLI 输出。

RPC 被添加到设备上的 Junos OS 模式中。在 CLI 中执行 RPC 时,它会打印请求的物理接口的名称和操作状态。

要求

此示例使用以下硬件和软件组件:

  • 运行 Junos OS 17.3R1 或更高版本的设备,支持加载自定义 YANG 数据模型。

RPC 和操作脚本概述

此示例中的 YANG 模块定义自定义 RPC 以返回某些物理接口的名称和操作状态。YANG 模块 rpc-interface-status 保存在 rpc-interface-status.yang 文件中。该模块导入 Junos OS 扩展模块,提供在设备上执行自定义 RPC 和自定义 CLI 输出所需的扩展。

该模块定义 get-interface-status 了 RPC。请求 <get-interface-status> 标记用于在设备上远程执行 RPC。在 RPC 定义中,语 junos:command 句定义用于在 CLI 中执行 RPC 的命令,在此情况下是 show intf status

junos:scriptjunos:action-execute语句定义了在执行 RPC 时调用的操作脚本。此示例使用名为 rpc-interface-status.py 的 Python 操作脚本检索 RPC 所需的信息,并按 RPC output 语句中的定义返回 XML 输出元素。

注意:

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

RPC 有一个输入参数,用于 match确定在输出中包含的接口。执行 RPC 时,您包括一个在所需接口上匹配的字符串,例如 ge-0*。空字符串 (“”) 在所有接口上匹配。操作脚本将空字符串的默认值定义为 match 空字符串,因此如果用户省略此论点,输出将包含所有接口的信息。

RPC 还定义了相应操作脚本必须发出的输出节点。根节点是该<interface-status-info>元素,其中包含包含与接口匹配的<interface><status>节点包含的零个或更多<status-info>元素。语junos-odl:format interface-status-info-format句定义了 CLI 中显示的输出的格式。此节点不会在输出 XML 树中发出。

此示例介绍了 Python 操作脚本的两个版本。脚本展示检索操作命令输出的方法不同,但两个脚本都发出相同的 RPC 输出。第一个操作脚本使用 Python subprocess 模块执行 show interfaces match-value | display xml 命令,然后将字符串输出转换为 XML。第二个操作脚本使用 Junos PyEZ 执行相当于命令的 show interfaces match-value RPC。两个脚本都使用相同的代码解析命令输出,并提取每个物理接口的名称和操作状态。这些脚本为 RPC 输出构建 XML,然后打印输出,然后将信息返回设备。XML 树必须与 RPC 中定义的层次结构完全匹配。

注意:

Junos 设备为操作输出中的许多元素(包括 <interface-information> 元素)定义了与版本相关的名称空间。为了使 RPC Junos OS 版本独立,代码对 local-name() 这些元素使用 XPath 表达式中的功能。您可以选择将名称空间映射作为参数 xpath() ,并根据适当的名称空间对元素进行资格认证。

包含 RPC 和操作脚本文件的模块作为名为 intf-rpc的全新 YANG 软件包的一部分添加到设备中。

YANG 模块

YANG 模块

YANG 模块 rpc-interface-status.yang 定义了 RPC、用于在 CLI 中执行 RPC 的命令,以及执行 RPC 时要调用的操作脚本名称。文件的基本名称必须与模块名称匹配。

操作脚本

对应的操作脚本 rpc-interface-status.py。此示例介绍了两个操作脚本,这些脚本使用不同的方法检索数据。一个脚本使用 Python subprocess 模块,另一个脚本使用 Junos PyEZ 库。两个脚本都发出相同的 RPC XML 输出。

注意:

从 Junos OS 版本 21.2R1 和 Junos OS Evolved 版本 21.2R1 开始,当设备将命令行参数传递至 Python 操作脚本时,它将单个连字符 (-) 前缀为单个字符的论证名称,并将两个连字符 (--) 前缀为多字符论证名称。

操作脚本(使用 subprocess

以下操作脚本使用 Python subprocess 模块执行操作命令并检索数据。此示例提供了两个版本的脚本,可适当处理不同版本的脚本命令行参数。

Junos OS 版本 21.1 和更低版本

Junos OS 版本 21.2R1 和更高版本

操作脚本(使用 Junos PyEZ)

以下操作脚本使用 Junos PyEZ 执行操作命令并检索数据。此示例提供了两个版本的脚本,可适当处理不同版本的脚本命令行参数。

Junos OS 版本 21.1 和更低版本

Junos OS 版本 21.2R1 和更高版本

支持执行 Python 脚本

要使设备能够执行未签名的 Python 脚本:

  1. language python根据适合 Junos OS 版本配置或language python3语句。
    注意:

    从 Junos OS 20.2R1 版和 Junos OS Evolved 版本 22.3R1 开始,设备使用 Python 3 执行 YANG 操作和转换脚本。在早期版本中,Junos OS 仅使用 Python 2.7 执行这些脚本,而 Junos OS Evolved 默认使用 Python 2.7 执行脚本。

  2. 提交配置。

在设备上加载 RPC

要将 RPC 和操作脚本添加到 Junos 模式:

  1. 将 YANG 模块和操作脚本下载到 Junos 设备。
  2. 确保 Python 操作脚本满足以下要求:
  3. (可选)验证 YANG 模块和操作脚本的语法。
  4. 将 YANG 模块和操作脚本添加到新的 YANG 包中。
    注意:

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

  5. 当系统提示您重新启动 Junos OS CLI 时,按下 Enter 接受默认值, yes或键入 yes 并按下 Enter

验证 RPC

目的

验证 RPC 是否可根据预期工作。

行动

在操作模式下,在 CLI 中执行 RPC,方法是发出由 RPC 定义中的语句定义的 junos:command 命令,并包括 match 输入参数。在此示例中,匹配参数用于在从 ge-0 开始的所有接口上匹配。

您还可以调整匹配条件以返回不同接口集。例如:

要以 XML 格式返回相同输出,请将过滤器附加 | display xml 到 命令。

注意:

要在所有接口上匹配,请省略 match 该参数,或将该参数的值设置为空字符串(“”)。

意义

执行 RPC 时,设备将调用操作脚本。操作脚本执行操作命令,从设备检索接口信息,解析所需信息的输出,并打印 RPC 语句中定义的 RPC output 输出的 XML 层次结构。在 CLI 中执行 RPC 时,设备使用 RPC 中定义的 CLI 格式将 XML 输出转换为显示的 CLI 输出。要返回原始 XML 输出,请将过滤器附加 | display xml 到 命令。

注意:

使用 RPC 请求标记远程执行 RPC 时,输出的默认格式为 XML。

RPC 执行错误故障排除

问题

描述

执行 RPC 时,设备会生成以下错误:

原因

调用 RPC 的用户没有执行相应 Python 操作脚本的必要权限。

解决 方案

用户只能在 Junos 设备上执行未签名的 Python 脚本,因为脚本的文件权限包括用户按用户、组或其他部分所属于的第一类的读取权限。

验证脚本是否具有让用户执行脚本的必要权限,并在适当时调整权限。如果更新了权限,还必须更新 YANG 包,才能使此更改生效。例如:

发布历史记录表
释放
描述
21.2R1 和 21.2R1-EVO
从 Junos OS 版本 21.2R1 和 Junos OS Evolved 版本 21.2R1 开始,当设备将命令行参数传递至 Python 操作脚本时,它将单个连字符 (-) 前缀为单个字符的论证名称,并将两个连字符 (--) 前缀为多字符论证名称。