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

Juniper.junos 作用

juniper_junos_software

注意:

从版本 2.0.0 开始 Juniper.junos ,该 juniper_junos_software 模块将替换模块 junos_install_os 的功能。

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

如何指定软件映像位置

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

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

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

软件包位置

no_copy 参数

local_packagepkg_set 参数

remote_package 参数

Ansible 控制节点

省略或设置为 false

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

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

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

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

对于混合虚拟机箱环境:

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

远程定位

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

目标设备

设置为 true

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

如果软件包驻留在 Ansible 控制节点上,请包含用于在独立 Junos 设备或非混合虚拟机箱中的成员上安装软件的参数,或者包括local_packagepkg_set用于在混合虚拟机箱中的成员上安装软件的参数。module 参数指定本地控制节点上一个或多个软件包的绝对或相对文件路径。

参数 local_package 是指定软件映像路径的单个字符串。该 pkg_set 参数包含一个字符串列表,这些字符串为各种虚拟机箱成员指定必要的软件映像路径,顺序不分先后。例如:

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

如果软件包已驻留在目标 Junos 设备上,则模块必须包含 no_copy: True 参数以及 remote_package 参数,用于指定目标设备上现有软件包的文件路径。如果未指定目录,则 remote_package 默认为 / var/tmp

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

安装过程概述

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

执行 softwarejuniper_junos_software 模块时,它将执行以下操作:

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

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

    • SCP 或 FTP 将所有软件包复制到目标设备。

      当模块包含 local_package时,包将复制到remote_package目录,如果未指定,则复制到 /var/tmp 目录(如果remote_package具有相同名称和校验和的文件尚未驻留在设备上的目标位置)。当模块包含 pkg_set时,软件包始终复制到虚拟机箱主设备上的 /var/tmp 目录。

      注意:

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

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

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

  1. 如果 validate 参数设置为 true

    注意:

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

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

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

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

如何指定超时值

瞻博网络软件模块通过 NETCONF 会话执行操作。NETCONF RPC 超时的默认时间为 30 秒。在安装过程中,某些操作会增加 RPC 超时间隔,如下所示:

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

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

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

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

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

使用 or software juniper_junos_software 模块在设备上安装软件时,该模块会为给定的安装参数调用相应的 RPC,例如, <request-package-add> 用于标准 Junos OS 安装的 RPC、用于虚拟机主机升级的 RPC、 <request-vmhost-package-add> 用于统一 ISSU 方案的 RPC 等 <request-package-in-service-upgrade> 。这些模块支持许多安装选项(例如选项 validate )的显式参数。这些模块还支持该 kwargs 参数,这使您能够包含 RPC 支持但没有等效模块参数的任何其他选项。该 kwargs 参数采用其他受支持选项的键/值对的字典。

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

注意:

模块应仅包含目标 Junos 设备上支持的安装选项。

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

如何执行 VM 主机升级

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

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

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

如何执行统一的 ISSU 或 NSSU

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

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

借助 NSSU 功能,您可以使用冗余路由引擎升级交换机或虚拟机箱上运行的 Junos OS 软件,同时将对网络流量的干扰降至最低。若要执行不间断软件升级, softwarejuniper_junos_software 模块必须包含 nssu: True 参数。例如:

示例:使用 Ansible 安装软件

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

要求

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

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

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

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

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

概述

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

该操作手册包含以下任务: Checking NETCONF connectivity 该任务利用模块尝试 wait_for 使用默认 NETCONF 端口 830 与 Junos 设备建立 NETCONF 会话。如果控制节点在 playbook 执行期间未能与设备建立 NETCONF 会话,则会跳过该设备的剩余任务。

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

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

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

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

配置

创建 Ansible 剧本

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

  1. 包括剧本和此重头戏的样板文件,该剧在本地执行模块。

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

  3. (可选)创建一个任务来验证 NETCONF 连接。

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

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

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

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

结果

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

执行剧本

要执行剧本,请执行以下操作:

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

验证

验证安装

目的

验证软件安装是否成功。

行动

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

意义

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

版本历史记录表
释放
描述
2.0.0
从版本 2.0.0 开始 Juniper.junos ,该 juniper_junos_software 模块将替换模块 junos_install_os 的功能。