Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用 Ansible 在 Junos 设备上安装软件

总结 使用瞻博网络 Ansible 模块在 Junos 设备上安装软件。

使用 Ansible 安装软件

瞻博网络提供了一个 Ansible 模块,可用于在 Junos 设备上安装或升级软件映像。 表 1 概述了该模块。

表 1:软件模块

内容集

模块名称

juniper.device 收集

software

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

如何指定软件映像位置

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

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

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

软件包位置

no_copy 参数

local_packagepkg_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如果参数包含文件名,则 和 remote_package 参数的文件名local_package必须相同,否则模块将生成错误。

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

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

安装过程概述

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

执行模块 software 时,它会执行以下操作:

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

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

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

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

      注意:

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

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

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

  1. validate 参数设置为 true时,针对新包验证配置。

    注意:

    默认情况下, software 模块不会根据现有配置验证软件包或捆绑包,作为添加软件包的先决条件。要确保活动配置适用于新的软件映像,请将 validate 参数 true设置为。

  2. 在每个单独的路由引擎上安装软件包,除非 all_re 设置为 false

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

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

如何指定超时值

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

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

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

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

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

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

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

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

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

注意:

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

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

如何执行 VM 主机升级

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

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

以下操作指南将在指定设备上升级和重新启动 Junos OS 和主机操作系统:

如何执行统一的 ISSU 或 NSSU

juniper.device.software 模块支持在支持该功能并满足必要要求的设备上执行统一不中断服务的软件升级(统一 ISSU)或不间断软件升级 (NSSU)。有关统一 ISSU 和 NSSU 功能的详细信息,请参阅您产品的软件文档。

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

NSSU 功能允许您升级在带有冗余路由引擎的交换机或虚拟机箱上运行的 Junos OS 软件,同时尽量减少对网络流量的干扰。若要执行不间断的软件升级, software 模块必须包含参数 nssu: true 。例如:

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

通常,升级非混合 EX 系列虚拟机箱时,应按照 安装过程概述 中概述的安装过程升级整个虚拟机箱。但是,有时可能需要在虚拟机箱中的特定成员交换机上安装软件。从该系列的 1.0.3 juniper.device 版开始,您可以在非混合 EX 系列虚拟机箱中的各个成员交换机上安装软件包。

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

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

示例:使用 Ansible 安装软件

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

要求

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

  • 运行 Ansible 2.10 或更高版本并安装集合的 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 会话。如果控制节点在 playbook 执行期间未能与设备建立 NETCONF 会话,则它将跳过该设备的 play 中的其余任务。

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

参数 local_package 定义 Ansible 控制节点上 Junos OS 软件包的路径。在安装过程中,该模块会在目标设备上执行存储清理操作,将软件映像复制到设备上的 /var/tmp 目录,验证文件的校验和,根据活动配置验证新软件,然后在目标主机上的每个路由引擎上安装软件。默认情况下, software 模块会在安装完成后重新启动每个路由引擎;但是,为清楚起见,会显式设置 reboot: true 此任务。

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

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

配置

创建 Ansible 操作指南

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

  1. 包括 playbook 的样板和 this play,它在本地执行模块。

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

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

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

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

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

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

结果

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

执行操作手册

要执行 playbook,请执行以下操作:

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

验证

验证安装

目的

验证软件安装是否成功。

行动

playbook 输出应指示任何失败的任务。但是,您也可以查看操作指南中定义的日志文件的内容,以获取有关安装的详细信息。此处显示了示例日志文件输出。为简洁起见,省略了一些输出。

意义

日志文件内容指示映像已成功复制并安装在目标设备上的两个路由引擎上。