Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用 Ansible 在 Junos 设备上执行命令和 RPC

总结 使用瞻博网络 Ansible 模块在 Junos 设备上执行操作模式命令和 RPC。

瞻博网络提供了 Ansible 模块,可用于在 Junos 设备上执行操作模式命令和远程过程调用 (RPC)。 表 1 概述了这些模块。

表 1:命令和 RPC 模块

内容集

模块名称

juniper.device 收集

command

rpc

以下各节讨论如何使用模块、解析模块响应、指定输出格式以及将输出保存到文件中。

注意:

要更轻松地从运维输出中提取目标数据,您还可以将该 juniper.device.table 模块与自定义或预定义的 Junos PyEZ 运算表配合使用。有关更多信息,请参阅 将 Ansible 与 Junos PyEZ 表结合使用,以从 Junos 设备检索操作信息

如何使用瞻博网络模块执行命令

juniper.device.command 模块允许您在 Junos 设备上执行操作模式命令。该模块需要一个参数, commands该参数是要在设备上执行的一个或多个 Junos OS 操作模式命令的列表。

以下操作指南在清单组中的每台设备上执行两个操作模式命令,并在标准输出中显示模块响应。在此示例中, command 模块使用默认位置的 SSH 密钥向设备进行身份验证。

有关模块的响应和输出格式的信息,请参阅 了解模块响应 以及如何 指定命令或 RPC 输出的格式

如何使用瞻博网络模块执行 RPC

Junos XML API 是 Junos OS 配置语句和操作模式命令的 XML 表示形式。它为 Junos OS 配置层次结构中的所有语句以及您在 Junos OS CLI 中发出的许多操作模式命令定义等效的 XML。每个带有 Junos XML 对应项的操作模式命令都会映射到一个请求标记元素,并在必要时映射到一个响应标记元素。请求标记用于 NETCONF 或 Junos XML 协议会话中的远程过程调用 (RPC),以从 Junos 设备请求信息。服务器使用包含在响应标记元素中的 Junos XML 元素返回响应。

您可以通过该 juniper.device.rpc 模块在 Junos 设备上执行 RPC。这些模块需要一个参数 ,该参数 rpcs是要在设备上执行的一个或多个 Junos OS RPC 的列表。

以下操作指南在 get-interface-information 清单组中的每台设备上执行 RPC,并在标准输出中显示模块响应。 ,RPC 等同于 show interfaces 操作模式命令。在此示例中, rpc 模块使用默认位置的 SSH 密钥向设备进行身份验证。

注意:

有关将 CLI 命令映射到 RPC 请求标记的信息,请参阅操作标记的 Junos XML API 资源管理器

有关模块的响应和输出格式的信息,请参阅 了解模块响应 以及如何 指定命令或 RPC 输出的格式

juniper.device.rpc 模块支持该 kwargs 选项,该选项允许您为 RPC 指定关键字参数和值。的 kwargs 值可以是:

  • 关键字和值的单一字典

  • 为多个 RPC 提供参数的字典列表

列表中的项目 kwargs 与列表中的 RPC rpcs 之间必须具有一对一的对应关系。如果执行多个 RPC,并且一个 RPC 不需要任何参数,请将相应的 kwargs 列表项设置为等于空字典 {}。如果单个 RPC 参数不需要值,请将其值设置为等于 true

注意:

必须在 RPC 参数中使用下划线代替连字符,这在某些情况下可能会导致异常或错误。

以下操作指南在清单组中的每台设备上执行指定的 RPC,并在标准输出中显示模块响应。 get-interface-information RPC 请求 lo0.0 接口的简级输出,RPC get-lldp-interface-neighbors 请求 ge-0/0/0 接口的信息。 get-software-information RPC 使用空字典执行 RPC,不带其他参数。

了解模块响应

juniper.device.commandjuniper.device.rpc 模块将设备的 RPC 回复存储在模块响应中的几个不同键中。每个键的数据结构如下:

  • stdout—RPC 回复是单个多行字符串。

  • stdout_lines- RPC 回复是单行字符串的列表。

  • parsed_output- RPC 回复被解析为 JavaScript 对象表示法 (JSON) 数据结构。仅当数据格式为 XML 或 JSON 时,才会返回此键。

如果模块执行单个命令或 RPC,则模块的响应会将返回的键放在顶层。如果模块执行多个命令或 RPC,则模块的响应将包含一个 results 键,该键是字典列表。列表中的每个元素对应于单个命令或 RPC,并包括将为该命令或 RPC 返回的所有键。

例如,以下响应对应于执行单个 RPC:

在某些情况下,命令或 RPC 输出可能很广泛,可能需要在模块的响应中抑制输出。若要省略模块响应中的输出键,请包含在 return_output: false 该模块的参数列表中。

如何指定命令或 RPC 输出的格式

commandrpc 模块将设备的 RPC 回复存储在模块响应中的几个不同键中:stdoutstdout_linesparsed_outputparsed_output仅当命令或 RPC 输出格式为 XML 或 JSON 时,该密钥才存在,它包含分析为 JSON 数据结构的数据。

stdoutstdout_lines 键包含为模块定义的默认格式的数据。默认情况下,command模块以文本格式返回命令输出,模块rpc以 XML 格式返回 RPC 输出。

若要指定不同的输出格式,请包含 formats 参数,并将值设置为等于所需的格式。支持的格式包括:

  • json

  • text

  • xml

formats 参数采用字符串或字符串列表。如果执行多个命令或 RPC 并仅指定一种格式,则所有已执行的命令和 RPC 的输出格式都是相同的。若要为每个命令或 RPC 的输出指定不同的格式,请将 formats 参数设置为所需格式的列表。列表必须指定与命令或 RPC 相同的格式数。

以下操作指南在清单组中的每台设备上执行两个 RPC,并请求所有已执行 RPC 的输出的文本格式:

执行 playbook 时, stdout 模块响应中的和 stdout_lines 键包含文本格式的 RPC 回复。

以下操作指南在清单组中的每个设备上执行两个 RPC,并以文本格式请求第一个 RPC 的输出,并以 JSON 格式请求第二个 RPC 的输出:

如何将命令或 RPC 输出保存到文件

使用 juniper.device.commandjuniper.device.rpc 模块在设备上执行命令或 RPC 时,可以通过添加 destdest_dir module 参数将返回的数据保存到本地 Ansible 控制节点上的文件中。该 dest_dir 选项将每个命令或 RPC 的输出保存在设备的单独文件中,而选项 dest 则将所有命令和 RPC 的输出保存在设备的同一文件中。如果已存在具有目标名称的输出文件,则模块将覆盖该文件。

如果要将数据保存到文件中,并且不希望在模块的响应中复制命令或 RPC 输出,则可以选择包含在return_output: false模块的参数列表中。设置为return_outputfalse会导致模块省略模块响应中的输出键。如果设备返回大量数据,则可能需要执行此操作。

以下各节概述了如何使用 dest_dirdest 选项。

dest_dir

要在本地 Ansible 控制节点上指定保存检索数据的目录,请包含该 dest_dir 参数,并定义目标目录的路径。该模块将在设备上执行的每个命令或 RPC 的输出存储在名为 hostname_name 的单独文件中。format 其中:

  • hostname- 执行命令或 RPC 的设备的主机名。

  • name- 在受管设备上执行的命令或 RPC 的名称。该模块将命令名称中的空格替换为下划线 ( _ )。

  • format- 输出的格式,可以是 jsontextxml

以下操作指南在清单组中的每台设备上执行两个 RPC,并将每个设备的每个 RPC 的输出保存在 Ansible 控制节点上 playbook 目录中的单独文件中:

主机 dc1a.example.net 生成的输出文件为:

  • dc1a.example.net_get-software-information.xml

  • dc1a.example.net_get-system-uptime-information.xml

同样,以下 playbook 在清单组中的每台设备上执行等效命令,并将每个设备的每个命令的输出保存在 Ansible 控制节点上 playbook 目录中的单独文件中:

主机 dc1a.example.net 生成的输出文件为:

  • dc1a.example.net_show_version.text

  • dc1a.example.net_show_system_uptime.text

DEST

要指定在本地 Ansible 控制节点上将目标节点的所有命令或 RPC 输出保存到的路径和文件名,请包含 dest 该参数,并定义该文件的文件名或完整路径。如果包含 dest 参数,但省略目录,则文件将保存在 playbook 目录中。如果在多个设备上执行命令或 RPC,则参数 dest 必须包含一个变量,例如 {{ inventory_hostname }} 用于区分每个设备的文件名。如果不区分文件名,则每个设备的输出文件将覆盖其他设备的输出文件。

以下操作指南在清单组中的每台设备上执行 RPC。所有 RPC 的输出都存储在每个设备的单独文件中,并且该文件将放置在 Ansible 控制节点上的 playbook 目录中。每个文件都由设备主机名进行唯一标识。

例如,主机 dc1a.example.net 生成的输出文件 dc1a.example.net-system-information.xml ,其中包含设备上执行的所有 RPC 的输出。