本页内容
创建并执行 Ansible 操作指南来管理 Junos 设备
您可以创建执行瞻博网络模块的 Ansible 操作指南,从而在运行 Junos OS 的设备和运行 Junos OS Evolved 的设备上执行操作和配置任务。
瞻博网络提供 Ansible 模块,让您能够在 Junos 设备上执行操作和配置任务。本主题概述如何创建简单的 Ansible 操作指南,以便在 Junos 设备上执行瞻博网络模块。
剧本概述
您可以创建 Ansible 指南来处理更复杂的管理任务。操作指南由一个或多个 play 或任务组组成,这些操作在一组已定义的主机上运行。每个剧本必须指定:
-
执行任务的主机
-
要在每个主机上执行的任务列表
-
任何必需的变量或模块参数,包括身份验证参数(如果尚未在其他地方定义这些参数)
操作指南引用的任何 Ansible 主机都必须在 Ansible 清单文件中定义。Ansible 清单文件的默认位置为 /etc/ansible/hosts。
playbook 通过调用模块在主机上执行任务。瞻博网络 Ansible 模块通过该集合进行 juniper.device 分发,该集合托管在 Ansible Galaxy 上。要在操作指南中使用瞻博网络模块,必须在 Ansible 控制节点上安装集合。有关集合和模块的更多信息,请参阅 了解适用于 Junos OS 的 Ansible 集合和模块。
瞻博网络模块不需要 Junos 设备上的 Python,因为它们使用 Junos XML API 和 NETCONF 与设备交互。因此,要在 Junos 设备上执行操作,您必须在安装了 Python 的 Ansible 控制节点上本地运行模块。您可以通过定义相应的 Ansible 连接和网络操作系统参数在本地运行这些模块。有关集合中 juniper.device 模块的连接参数和值的信息,请参阅如何在 Junos 设备上执行模块。
默认情况下,Ansible 会自动从远程主机收集系统事实。但是,当您在本地执行 Play 时,Ansible 会从 Ansible 控制节点而不是远程主机收集事实。为避免收集控制节点的事实,请包含在 gather_facts: no playbook 中。
使用通过 SSH 的 NETCONF 会话执行瞻博网络模块时,Junos 设备必须启用 NETCONF。我们建议您在操作指南中创建一个简单的任务,在执行其他任务之前,该任务会显式测试每台设备上是否启用了 NETCONF。如果任何主机的此任务失败,默认情况下,Ansible 不会为此主机执行其余任务。如果不进行此测试,您可能会在 playbook 执行期间收到一个通用连接错误,该错误不会指示此问题或其他问题是导致任何故障的原因。
您可以编写 YAML 格式的剧本。YAML 对空格敏感,缩进很重要。因此,您的剧本应始终使用空格而不是制表符。在 YAML 中,连字符 (-) 前面的项是列表项, key: value 表示法表示哈希值。有关创建 Ansible 操作指南的详细信息,请参阅 https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks.html 上的 Ansible 官方文档。
创建 Ansible 剧本
开始之前:
-
选择用于管理 Junos 设备的模块集。该
juniper.device集合包括juniper.device原始模块和junipernetworks.junos模块。 -
使用适合您的模块集的 Ansible 连接和网络操作系统变量更新清单文件,如 在管理 Junos 设备时了解 Ansible 清单文件中所述。
要创建简单的操作指南以在 Junos 设备上执行任务,请执行以下操作:
执行剧本
此示例中的操作指南使用以下 Ansible 清单文件,该文件将连接定义为 local。
[dc1] dc1a.example.com ansible_host=198.51.100.1 [dc1:vars] ansible_connection=local
要执行该剧本,请执行以下步骤:
-
在控制节点上发出
ansible-playbook命令,并提供 playbook 路径和任何必需的选项。user@ansible-cn:~$ ansible-playbook junos-get-facts.yaml PLAY [Get Device Facts] *************************************************** TASK [Check NETCONF connectivity] ***************************************** ok: [dc1a.example.net] TASK [Retrieve information from Junos devices] **************************** ok: [dc1a.example.net] TASK [Print version] ****************************************************** ok: [dc1a.example.net] => { "junos.version": "19.4R1.10" } PLAY RECAP **************************************************************** dc1a.example.net : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0