创建并执行 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 设备上执行任务的简单操作指南,请执行以下操作:
执行操作手册
要执行 playbook,请执行以下操作:
-
在控制节点上发出
ansible-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