Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

如何在操作脚本中使用 RPC 和操作模式命令

大多数 Junos OS 操作模式命令具有 XML 等效物。操作脚本可使用 远程过程调用 (RPC) 协议在本地或远程设备上执行这些 XML 命令。 Junos XML API 操作开发人员参考中列出了具有 XML 等效物的所有操作模式命令。

操作脚本中的 RPC 和操作模式命令的使用在以下部分中进行了更详细的讨论:

在操作脚本中使用 RPC

要在 SLAX 或 XSLT 操作脚本中使用 RPC,请将 RPC 包含在可变声明中,然后使用 jcs:invoke() RPC 变量作为参数的或 jcs:execute() 扩展功能调用 RPC。该 jcs:invoke() 功能在本地设备上执行 RPC。该 jcs:execute() 功能与连接手柄一起在远程设备上执行 RPC。

下列片段在本地设备上调用 RPC,在 示例中进行了扩展并完全介绍 : 使用 Op 脚本自定义 show interfaces terse 命令的输出

XSLT 语法

SLAX 语法

以下片段在远程设备上调用相同的 RPC:

XSLT 语法

SLAX 语法

在 Python 操作脚本中,使用 Junos PyEZ API 可轻松执行 RPC。每个 Junos PyEZ Device 类实例都有一个 rpc 属性,允许您执行通过 Junos XML API 可用的任何 RPC。与本地或远程设备建立会话后,可通过将属性和 RPC 方法名称附加 rpc 到设备实例来执行 RPC。返回值是从标记下 <rpc-reply> 的第一个元素开始的 XML 对象。

要在本地设备上执行 RPC,请使用空参数列表创建 Device 实例。要在远程设备上执行 RPC,请创建使用相应参数连接到该设备的 Device 实例。

以下代码在本地设备上调用 RPC 并打印回复:

Python 语法

以下代码在远程设备上调用相同的 RPC 并打印回复:

Python 语法

要在远程设备上执行 RPC,必须建立 SSH 会话。要使脚本建立连接,您必须为执行脚本的本地设备上的远程设备配置 SSH 主机密钥信息,或者远程设备的 SSH 主机密钥信息必须存在于执行脚本的用户的已知主机文件中。对于执行 RPC 的每个远程设备,使用以下一种方法配置 SSH 主机密钥信息:

  • 要在本地设备上配置 SSH 已知主机,请包括 host 语句,并在配置的层次结构级别为远程设备 [edit security ssh-known-hosts] 指定主机名和主机密钥选项。

  • 要手动检索 SSH 主机密钥信息,请发出 set security ssh-known-hosts fetch-from-server hostname 配置模式命令,指示 Junos OS 连接到远程设备并添加密钥。

  • 要从文件中手动导入 SSH 主机密钥信息,请使用 set security ssh-known-hosts load-key-file filename 配置模式命令并指定已知主机文件。

  • 或者,执行脚本的用户可以登录本地设备,将 SSH 登录到远程设备,然后手动接受主机密钥,主机密钥被添加到用户已知的主机文件中。在以下示例中,root 登录到路由器 1。为了在路由器 2 上执行远程 RPC,root 通过发出ssh router2操作模式命令并手动接受密钥来添加路由器 2 的主机密钥。

显示命令的 RPC 标记

您可在设备的 CLI 中显示用于操作模式命令的 RPC XML 标记。要显示用于命令的 RPC XML 标记,请在管道符号 (|) 后输入 display xml rpc

以下示例显示命令的 show route RPC 标记:

SLAX 和 XSLT 脚本可使用 RPC XML 标记执行 RPC。Python 脚本必须将 RPC 标记和命令选项转换为适合 Python 的格式。有关使用 Junos PyEZ 执行 RPC 以及将 RPC 标记映射到相应的 Python 方法和方法参数的详细信息,请参阅 使用 Junos PyEZ 在运行 Junos OS 的设备上执行 RPC

在 Op Scripts 中使用操作模式命令

某些操作模式命令没有 XML 等效物。SLAX 和 XSLT 脚本可以使用该元素执行没有 XML 等效物的<command>命令。Python 脚本可使用类中Device定义的 Junos PyEZ cli() 方法执行这些命令。

如果 Junos XML API 操作开发人员参考中未列出命令,则该命令没有 XML 等效项。确定命令是否有 XML 等效项的另一种方式是发出 命令,然后发出 | display xml 命令,例如:

如果输出中仅包含标记元素,如 <output><cli><banner>, 命令可能没有 XML 等效项。在以下示例中,输出表示命令 show host 没有 XML 等效项:

注意:

对于具有 XML 对应项的某些命令,管道| display xml命令的输出不包括标记元素,<output><cli><banner>而只是因为未配置相关功能。例如,命令show services cos statistics forwarding-class具有 XML 等效项,用于在响应标记中<service-cos-forwarding-class-statistics>返回输出,但是如果配置在层次结构级别上[edit class-of-service]不包含任何语句,则不会显示命令的实际数据show services cos statistics forwarding-class | display xml。输出与此类似:

因此, Junos XML API 操作开发人员参考 中的信息通常更可靠。

SLAX 和 XSLT 操作脚本可包含没有 XML 等效器件的命令。 <command>使用脚本中的 、 <xsl:value-of><output> 元素,如以下代码片段所示。此片段在示例中进行了扩展并进行了全面介绍 :使用 Op Script 显示 DNS 主机名信息

Python 操作脚本可使用 Junos PyEZ API 执行没有 XML 等效项的命令。在 cli() 类中 Device 定义的方法执行操作模式命令,并以文本格式返回输出。例如:

您也可指定 format='xml' 返回格式化为 Junos OS XML 元素的输出。有关 Junos PyEZ cli() 方法的详细信息,请 参阅 http://junos-pyez.readthedocs.org/en/latest/_modules/jnpr/junos/device.html#Device.cli