使用 juniper.device.software Ansible 模块在 Junos 设备上安装软件

您可以使用 juniper.device.software Ansible 模块在运行 Junos OS 的设备或运行 Junos OS Evolved 的设备上安装软件。

使用 Ansible 安装软件

瞻博网络提供 Ansible 模块,让您能够在 Junos 设备上安装软件映像。 表 1 概述了模块。如果您已经在使用集合中的 juniper.device 一组给定模块,请使用该集的模块。

表 1:软件模块

收藏

模块集

模块名称

juniper.device

juniper.device

juniper.device.software

junipernetworks.junos

juniper.device.junos_package

以下部分讨论如何使用该 juniper.device.software 模块在 Junos 设备上安装软件包。各节概述了如何指定软件映像位置以及常规软件安装过程和选项。这些部分还讨论如何在支持这些功能的设备上执行更专业的升级方案,例如虚拟机主机升级、统一不中断服务软件升级(统一 ISSU)或不间断软件升级 (NSSU)。

如何指定软件映像位置

使用该 juniper.device.software 模块在 Junos 设备上安装软件时,可以将软件包下载到 Ansible 控制节点。默认情况下,模块在执行安装之前将软件包复制到目标设备。对于混合虚拟机箱环境,软件包必须驻留在 Ansible 控制节点上。对于独立设备或非混合虚拟机箱环境,您还可以指示模块安装已驻留在目标 Junos 设备上或驻留在可从目标设备访问的 URL 上的软件映像。

表 2 概述了必须根据软件包位置设置的模块参数。模块必须始终包含 local_package、 pkg_set或 参数 remote_package 。参数默认 no_copy 为 false,指示模块将软件包从 Ansible 控制节点上的指定位置复制到目标设备。

表 2:软件包位置的模块参数

软件包位置

no_copy 参数

local_package 或 pkg_set 参数

remote_package 参数

Ansible 控制节点

省略或设置为 false

对于独立设备或非混合虚拟机箱环境:

设置为 local_package 本地控制节点上软件包的文件路径,包括文件名。文件路径相对于 playbook 目录。

(选答)软件包复制到的目标设备上的文件路径。默认目录为 /var/tmp。

如果包含文件名,则 remote_package 它必须与 中指定的 local_package文件名匹配。

对于混合虚拟机箱环境:

设置为 pkg_set 本地控制节点上一个或多个软件包的文件路径列表,包括文件名。文件路径相对于 playbook 目录。

–

远程定位

–

–

从安装软件包的目标 Junos 设备的角度查看的 URL。

目标设备

设置为 true

–

目标设备上软件包必须已驻留的文件路径。默认目录为 /var/tmp。

如果软件包驻留在 Ansible 控制节点上,请包含适合您安装的参数:

  • local_package— 在独立 Junos 设备上或非混合虚拟机箱中的成员上安装软件。参数值是一个字符串,用于指定软件映像的绝对路径或相对路径。

  • pkg_set— 在混合虚拟机箱中的成员上安装软件。参数值是一个字符串列表,用于指定各种虚拟机箱成员的软件映像的绝对或相对文件路径(无特定顺序)。

    例如:

默认情况下,如果包含 local_package or pkg_set 参数,模块会将所有软件包从 Ansible 控制节点复制到目标 Junos 设备(单个设备或虚拟机箱主设备)上的 /var/tmp 目录。如果要将local_package图像复制到其他目录,请定义remote_package参数并指定目标目录。如果参数包含文件名,则 remote_package 和local_packageremote_package参数的文件名必须相同,否则模块会生成错误。

如果软件包已驻留在目标 Junos 设备(单个设备或虚拟机箱主设备上),则模块必须包含 no_copy: true 参数和 remote_package 参数。 remote_package 该参数指定目标设备上现有软件包的文件路径。如果未指定目录,则 remote_package 默认值为 /var/tmp。

如果软件包位于 Ansible 控制节点或目标设备以外的位置,则模块必须包含 remote_package 参数并指定软件包的位置。的 remote_package 值是从目标 Junos 设备角度看的 URL。有关可接受的 URL 格式的信息,请参阅 在 Junos OS CLI 命令中指定文件名和 URL 的格式。

安装过程概述

要使用 Ansible 在 Junos 设备上安装软件包,请执行该 juniper.device.software 模块并提供所有必要的参数。例如:

执行该 juniper.device.software 模块时,它会执行以下操作:

  1. 将参数中 version 指定的Junos OS版本进行比较,或者将软件包文件名中指定的版本(如果参数省略) version 与受管理设备上已安装的版本进行比较。如果安装的版本和所需的版本相同,则模块将跳过其余安装步骤并设置 changed 和 failed false。
  2. 如果软件包位于 Ansible 控制节点上,并且 no_copy 参数被省略或设置为 false,则模块将执行以下操作:
    • 使用参数中 checksum_algorithm 指定的算法计算本地软件包的一个或多个软件包的校验和。可 checksum_algorithm 接受的值为 md5、 、 sha1和 sha256。默认值为 md5。或者,您可以在参数中 checksum 提供校验和。

    • 在目标设备上执行存储清理,以便为软件包创建空间,除非 cleanfs 参数设置为 false。

    • 如果具有相同名称和校验和的文件尚未驻留在设备上的目标位置,则 SCP 或 FTP 会将所有软件包复制到目标设备。

      当您包含 local_package时,模块会将包复制到目录中 remote_package ,或者如果未指定,则 remote_package 复制到 /var/tmp 目录。如果包含 pkg_set,模块始终会将软件包复制到虚拟机箱主设备上的 /var/tmp 目录。

      注意:

      如果设置 cleanfs: true 或省略该参数,模块会将软件包复制到设备上,即使该软件包最初存在于目标位置中也是如此。发生此复制是因为存储清理操作删除了现有文件。如果设置 cleanfs: false 并且文件已驻留在目标位置,则模块将跳过文件复制操作。

    • 计算每个远程文件的校验和,并将其与本地文件的校验和进行比较。

软件包到达目标设备后,无论是最初下载到目标设备还是由模块复制,模块都会执行以下操作:

  1. 根据新包验证配置,除非参数 validate 设置为 false。

    注意:从 2.0.4 版开始juniper.device,该validate参数默认为 true。在早期版本中,默认值为 false。
  2. 在每个单独的路由引擎上安装软件包,除非 all_re 设置为 false。

  3. 重新启动每个升级的路由引擎,除非 reboot 参数设置为 false。

该 software 模块允许您通过包含 logfile module 参数来记录安装进度。默认情况下,仅记录严重性级别为 WARNING 或更高的消息。要记录严重性级别为 INFO 或更高的消息(这是记录常规安装过程的消息所必需的),请使用 -v or --verbose 命令行选项执行操作指南。

如何指定超时值

该 juniper.device.software 模块通过 NETCONF 会话执行操作。NETCONF RPC 的默认超时时间为 30 秒。在安装过程中,某些操作会增加 RPC 超时间隔,如下所示:

  • 在设备上复制和安装软件包 - 1800 秒(30 分钟)

  • 计算校验和 - 300 秒(5 分钟)

  • 执行存储清理 - 300 秒(5 分钟)

在某些情况下,安装过程、校验和计算或存储清理可能会超过这些时间间隔。您可以通过将 、 checksum_timeout和 cleanfs_timeout 参数设置为install_timeout模块参数列表中所需的秒数来更改这些操作的超时值。例如:

如何指定没有等效模块参数的安装选项

使用该 juniper.device.software 模块在设备上安装软件时,该模块将为包含的安装参数调用相应的 RPC。例如,该模块 <request-package-add> 为标准 Junos OS 安装调用 RPC, <request-vmhost-package-add> 为虚拟机主机升级调用 RPC, <request-package-in-service-upgrade> 为统一 ISSU 方案调用 RPC,依此类推。

该模块支持许多安装选项的显式参数,例如选项 validate 。该模块还支持该 kwargs 参数。该参数使您能够包含 RPC 支持的任何其他选项。该 kwargs 参数采用其他支持选项的键/值对字典。

有关模块支持的当前选项列表,请参阅模块的 API 参考文档。有关特定 RPC 的所有可用选项的列表,请参阅等效命令的文档,或在 Junos XML API 资源管理器中搜索 RPC 的请求标记。

注意:

应仅包含目标 Junos 设备支持给定 RPC 的安装选项。

在以下操作指南中,模块software将在目标主机上安装新的软件映像。该模块包含带有 kwargs unlink: true的参数。此参数在成功升级后从目录中删除软件包,相当于在 RPC 中<request-package-add>包含<unlink/>该选项。

如何执行虚拟机主机升级

在具有支持 VM 主机的路由引擎的设备上,Junos OS 在基于 Linux 的主机(VM 主机)上作为虚拟机 (VM) 运行。虚拟机主机升级需要虚拟机主机安装包 (junos-vmhost-install-x.tgz),并升级主机操作系统和兼容的 Junos OS。在 CLI 中,您可以使用与 RPC 对<request-vmhost-package-add>应的操作模式命令执行request vmhost software add升级。

该 juniper.device.software 模块支持 vmhost: true 用于执行虚拟机主机升级的参数。当参数存在时,模块将使用 RPC 执行 <request-vmhost-package-add> 安装。

以下操作指南会升级并重新启动指定设备上的 Junos OS 和主机 OS:

如何执行统一的 ISSU 或 NSSU

该 juniper.device.software 模块支持在支持该功能并满足必要要求的设备上执行统一 ISSU 或 NSSU。有关统一 ISSU 和 NSSU 功能的更多信息,请参阅您产品的软件文档。

统一的 ISSU 功能使您能够在两个不同的 Junos OS 版本之间进行升级,而不会中断控制平面,并且将流量中断降至最低。要执行统一 ISSU,模块必须 software 包含参数 issu: true 。例如:

NSSU 功能允许您通过冗余路由引擎升级交换机或虚拟机箱上运行的 Junos OS 软件,同时将对网络流量的干扰降至最低。要执行 NSSU,模块必须 software 包含参数 nssu: true 。例如:

如何在 EX 系列虚拟机箱成员上安装软件

通常,升级非混合 EX 系列虚拟机箱时,请按照 安装过程概述 中概述的安装过程升级整个虚拟机箱。但是,有时您可能需要在虚拟机箱中的特定成员交换机上安装软件。 juniper.device.software 该模块允许您在非混合 EX 系列虚拟机箱中的单个成员交换机上安装软件包。

要在特定成员上安装软件,请包含 member_id 参数并定义指定成员 ID 的字符串列表。系统会将软件包从虚拟机箱主设备安装到指定的成员上。

以下 Ansible 操作指南对 EX 系列虚拟机箱中成员 0 和成员 1 上的软件进行了升级:

示例:使用 Ansible 安装软件

此示例使用该 juniper.device.software 模块在运行 Junos OS 的设备上安装软件映像。

要求

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

  • 运行 Ansible 2.17 或更高版本并安装集合的 juniper.device 配置管理服务器

  • 启用了 NETCONF 且用户帐户配置了适当权限的 Junos 设备

  • 在 Ansible 控制节点和 Junos 设备上为相应用户配置 SSH 公钥/私钥对

  • 定义了所需主机的现有 Ansible 清单文件

概述

此示例将提供 Ansible 操作指南,该操作指南使用该 juniper.device.software 模块在指定清单组中的主机上升级 Junos OS。在此示例中,软件映像驻留在 Ansible 控制节点上,模块会在安装之前将映像复制到目标设备。该模块没有显式定义参数 host ,因此该模块在默认主机 {{ inventory_hostname }}上运行,即 。

此操作指南包含任务 Check NETCONF connectivity ,该任务利用模块尝试 ansible.builtin.wait_for 使用默认 NETCONF 端口 830 与 Junos 设备建立 NETCONF 会话。如果控制节点在操作指南执行期间未能与设备建立 NETCONF 会话,则该节点将跳过该设备正在执行的剩余任务。

如果 NETCONF 检查成功,则任务 Install Junos OS package 将执行模块 juniper.device.software 。该 version 参数定义所需的 Junos OS 版本,正如 Junos 设备上的命令所 show version 报告的那样。在执行 playbook 期间,模块首先检查请求的版本是否尚未安装在设备上。如果请求的版本与当前安装的版本不同,则模块将安装请求的版本。

local_package该参数定义 Ansible 控制节点上 Junos OS 软件包的路径。在安装过程中,模块:

  • 在目标设备上执行存储清理操作

  • 将软件映像复制到设备上的 /var/tmp 目录中

  • 验证文件的校验和

  • 根据活动配置验证新软件

  • 在目标主机上的每个路由引擎上安装软件

默认情况下, juniper.device.software 模块会在安装完成后重新启动每个路由引擎;但是,为清楚起见,此任务已显式设置 reboot: true 。

该任务将模块结果存储在变量中 response ,并通知一个处理程序。如果未使用检查模式执行操作指南,则处理程序会 wait_reboot 尝试与设备建立会话,以验证设备是否已重新联机。该 wait_time 变量定义控制节点尝试与设备重新连接的时间长度。

此示例包括 logfile 用于记录安装进度的参数。此日志对于在安装失败时进行调试以及记录设备上安装的日期和时间非常重要。执行 playbook 的用户必须具有写入指定日志文件的权限。默认情况下,仅记录严重性级别为 WARNING 或更高的消息。此示例执行操作指南 -v ,其中包含记录严重性级别 INFO 或更高级别的消息的选项,以监控安装。

配置

创建 Ansible 剧本

要创建使用该 juniper.device.software 模块在 Junos 设备上安装软件映像的操作指南:

  1. 包括 playbook 和 play(在本地执行模块)的样板。

  2. 定义或导入任何必要的变量,在本例中,这些变量包括所需的 Junos OS 版本和新映像的路径等。

  3. (选答)创建任务以验证 NETCONF 连接。

  4. 创建任务以在设备上安装 Junos OS 软件包并通知处理程序。

  5. (选答)创建任务以打印模块响应。

  6. 创建用于验证设备在重新启动后是否重新联机的处理程序。

    处理程序名称应与安装任务中引用的名称相同。

结果

在 Ansible 控制节点上,查看完成的操作指南。如果 playbook 未显示预期的代码,请重复此示例中的说明以更正 playbook。

执行剧本

要执行该剧本,请执行以下步骤:

  • 在控制节点上发出 ansible-playbook 命令,并提供 playbook 路径和任何必需的选项。

验证

验证安装

目的

验证软件安装是否成功。

行动

剧本输出应指示任何失败的任务。但是,您也可以查看剧本中定义的日志文件的内容,了解有关安装的详细信息。示例日志文件输出如下所示。为简洁起见,部分输出被省略。

意义

日志文件内容指示,操作指南已成功复制映像并将其安装到目标设备上的两个路由引擎上。

变更历史表

是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。

发布
描述
2.0.4
从 2.0.4 版开始 juniper.device ,该 validate 参数默认为 true。在早期版本中,默认值为 false。