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 模块,可让您在 Junos 设备上执行操作和配置任务。本主题概述了如何创建简单的 Ansible 操作指南以在 Junos 设备上执行瞻博网络模块。

您可以创建 Ansible 操作指南来处理更复杂的管理任务。操作指南由在一组定义的主机上操作的一个或多个重头戏或任务组组成。操作指南中引用的 Ansible 主机必须在 Ansible 清单文件中定义,默认情况下,该文件位于 /etc/ansible/hosts 中。

每个剧本必须指定:

  • 运行任务的主机

  • 要在每台主机上执行的任务列表

  • 任何必需的变量或模块参数,包括身份验证参数(如果未在其他地方定义)

playbook 通过调用模块在主机上执行任务。瞻博网络 Ansible 模块通过 juniper.device 托管在 Ansible Galaxy 上的集合进行分布。要在操作指南中使用瞻博网络模块,必须在 Ansible 控制节点上安装该集合。有关集合和模块的更多信息,请参阅 了解适用于 Junos OS 的 Ansible 集合和模块

瞻博网络模块不需要在 Junos 设备上使用 Python,因为它们使用 Junos PyEZ 和基于 NETCONF 的 Junos XML API 与设备连接。因此,要在 Junos 设备上执行操作,必须在安装了 Python 的 Ansible 控制节点上本地运行模块。您可以通过包含在 connection: local playbook play 中来本地运行模块。使用 connection: local时,Ansible 会为剧中需要连接的每个任务建立与主机的单独连接。 juniper.device 集合模块还支持 connection: juniper.device.pyez。此连接类型仍会在 Ansible 控制节点上本地执行模块,但它会与主机建立连接,该连接会在执行播放中的所有任务期间持续存在。

默认情况下,Ansible 播放会自动从远程主机收集系统事实。但是,当您在本地执行重头戏时,Ansible 会从 Ansible 控制节点(而非远程主机)收集事实。若要避免为控制节点收集事实,请包含在 gather_facts: no 操作指南中。

通过 SSH 使用 NETCONF 会话(默认设置)执行瞻博网络模块时,必须在 Junos 设备上启用 NETCONF。我们建议您在操作指南中创建一个简单的任务,在执行其他任务之前,该任务显式测试是否在每个设备上启用了 NETCONF。如果此任务在任何主机上失败,则默认情况下,Ansible 不会为此主机执行其余任务。如果不进行此测试,则可能会在 playbook 执行期间收到一般连接错误,该错误不指示此问题还是另一个问题是否是任何失败的原因。

操作指南以 YAML 表示。YAML 对空格很敏感,缩进很明显。因此,您的剧本应始终使用空格而不是制表符。在 YAML 中,前面带有连字符 (-) 的项目被视为列表项, key: value 表示法表示哈希值。有关创建 Ansible 操作指南的详细信息,请参阅 Ansible 官方文档,网址为 https://docs.ansible.com/ansible/latest/playbook_guide/playbooks.html。

以下部分概述了创建和运行在 Junos 设备上执行 Ansible 模块的简单操作指南的步骤。

创建剧本

要创建在 Junos 设备上执行任务的简单操作指南,请执行以下操作:

  1. 在您喜欢的编辑器中,创建一个具有描述性 playbook 名称的新文件,该名称使用 .yaml 文件扩展名。
  2. 包括三个破折号以指示 YAML 文档的开头。
  3. 为该剧提供描述性名称。
  4. 定义模块将在其上运行的主机或主机组的冒号分隔列表,或指定all以指示清单文件中的所有主机。

    操作指南中引用的任何主机或组都必须在 Ansible 清单文件中定义。

  5. 指示 Ansible 在安装 Python 的 Ansible 控制节点上本地执行重播任务,因为 Junos 设备上不需要 Python。
    • Include connection: local 可在本地执行任务,但为剧中需要连接的每个任务建立与主机的单独连接。

    • Include connection: juniper.device.pyez 用于在本地执行任务,但会与主机建立持久连接,该连接在执行剧中的所有任务时都会持续存在。此连接类型仅由 juniper.device 集合模块支持。

    其余步骤使用 connection: local。若要使用具有持久连接的 juniper.device 集合模块,请更新要使用的 connection: juniper.device.pyez最终 playbook 。

  6. (可选)包括gather_facts: no以避免收集目标主机的事实,对于本地连接,目标主机是 Ansible 控制节点。
  7. (可选)引用juniper.device集合。

    您可以在 playbook 中定义键, collections 然后在任务中仅引用模块名称。但是,建议的方法是省略密钥, collections 改为使用其完全限定的集合名称 (FQCN) 来引用集合内容。

    此示例省略键 collections 并使用完全限定的集合名称。

  8. 定义任务节,并将一个或多个任务作为列表项包括在内。
  9. (可选)作为附加检查,创建一个任务来验证每个 Junos 设备的 NETCONF 连接。
  10. 创建使用瞻博网络模块的任务,并提供任何必要的连接和身份验证参数。

    此示例使用默认位置中的现有 SSH 密钥,并且未在操作指南中显式提供模块的凭据 facts

  11. (可选)根据需要定义其他任务或其他重头戏。

执行操作手册

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

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