Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

定义 Junos 设备自定义 YANG RPC 中的不同输出级别

在自定义 YANG RPC 中定义不同级别的输出

您可以使用 YANG 为 Junos 设备定义自定义 RPC。RPC 输出可定制为发出不同的数据和 CLI 格式,具体取决于 RPC 输入。这使您能够为同一 RPC 创建不同样式或输出级别。

当您调用 RPC 时,您可以通过为输入参数包含适当的值来请求所需的样式。操作脚本必须处理此参数并发出请求样式的 XML 输出。然后,Junos OS 会将 XML 转换为 YANG 模块中为该样式定义的相应 CLI 输出。本主题中介绍的 RPC 模板具有两种样式: briefdetail

要为 RPC 的输出创建不同样式:

  1. 在包含 RPC 的 YANG 模块中,导入 Junos OS ODL 扩展模块,该模块定义了 YANG 扩展,您可以使用 YANG 扩展来精确指定在 CLI 中执行 RPC 命令时或以文本格式请求 RPC 输出时如何呈现输出。
    注意:

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

  2. 在 RPC 的输入参数中,使用类型enumeration定义语leaf句,并包括enum定义每个样式名称的语句。
    注意:

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

  3. 在 RPC output 语句中,创建单独 junos-odl:style 的语句,为每个样式定义 CLI 格式。每个 style 语句的标识符应与列 leaf 举语句中定义的一个样式名称匹配。
    注意:

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

  4. 在 RPC 的操作脚本中,处理输入参数,并发出请求样式的 XML 输出,这些样式包含在与样式名称相同标记名称的父层元素中。
    注意:

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

    请参阅 示例:为 在各种版本中工作的完整脚本示例定义不同级别的输出。

以下代码概述了 RPC 和密闭模块的一般结构。当您在 CLI 中调用 RPC 并包含输入参数 level 并指定 brief ,或者 detail,Junos OS 将呈现为该样式定义的输出。

要在 CLI 中执行 RPC,请发出语句定义的 junos:command 命令,并通过包括相应的命令行论点(在此示例中为 level) 来指定样式。相应的操作脚本将处理输入参数,并发出请求样式的输出。

示例:定义不同级别的输出

此示例提供了简单的自定义 YANG RPC 和操作脚本,用于确定是否可访问主机,并根据用户输入打印不同级别的输出。

要求

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

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

RPC 和操作脚本概述

此示例中的 YANG 模块定义了用于对指定主机进行 ping 的自定义 RPC,并根据用户的输入使用不同级别的输出返回结果。YANG 模块 rpc-style-test 保存在 rpc 式 test.yang 文件中。该模块导入 Junos OS 扩展模块,提供在设备上执行自定义 RPC 和自定义 CLI 输出所需的扩展。

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

junos:scriptjunos:action-execute语句定义执行 RPC 时调用的操作脚本。此示例使用名为 rpc-style-test.py 的 Python 操作脚本检索 RPC 所需的信息。该脚本返回 RPC 语句中定义的每个输出级别的 output XML 输出元素。

注意:

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

RPC 有两个输入参数,hostip以及 level。该hostip参数是用于检查可访问性的主机。该level参数选择 RPC 输出的样式。执行 RPC 时,将包括目标主机的 IP 地址和级别,brief或者 detail。操作脚本将默认值定义为level'brief',因此如果省略此参数,RPC 将打印对应于简要样式的输出。

RPC 还定义了相应操作脚本必须发出的输出节点。根节点是<host-status-information>一个元素,它括起或<detail>包含<brief>该元素,具体取决于用户输入,以及为每个输出级别指定的儿童输出节点。这两个级别的输出都包括<hostip><status>儿童元素,但<detail>元素还包括<date>儿童元素。语junos-odl:format句定义了 CLI 中显示的输出的格式。此节点不会在输出 XML 树中发出。

操作脚本会对主机进行 ping,以确定是否可访问,并根据结果设置状态。然后,脚本根据指定 level 的参数构建并打印 RPC 输出的 XML。XML 树必须与 RPC 中定义的层次结构完全匹配。

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

YANG 模块和操作脚本

YANG 模块

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

操作脚本

对应的操作脚本 rpc-style-test.py。操作脚本根据用户提供的参数值打印不同级别的level输出。脚本定义了该参数的'brief'level默认值,以便如果用户省略了该参数,脚本将返回简要的输出样式。此示例提供了两个版本的操作脚本,可适当处理不同版本的脚本命令行参数。

操作脚本(Junos OS 版本 21.2R1 和更高版本)
操作脚本(Junos OS 版本 21.1 和更低版本)

配置

支持执行 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 包中。

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

验证 RPC

目的

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

行动

在操作模式下,在 CLI 中执行 RPC,方法是发出由 RPC 定义中的语句定义的 junos:command 命令。 hostip 包括输入参数,并包括 level 各不同级别输出的参数。

您可通过附加 | display xml 到 命令来查看相应的 XML。

同样,有关详细输出:

意义

执行 RPC 时,设备将调用操作脚本。该操作脚本将按照 RPC output 语句中定义的给定输出级别打印 XML 层次结构。在 CLI 中执行 RPC 时,设备使用 RPC 中定义的 CLI 格式将 XML 输出转换为显示的 CLI 输出。

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