使用 Ansible 从 Junos 设备检索事实
瞻博网络提供了 Ansible 模块,您可以使用这些模块管理 Junos 设备并在设备上执行操作和配置任务。这些模块不需要在受管设备上使用 Python,因为它们使用 Junos PyEZ 和基于 NETCONF 的 Junos XML API 与设备连接。因此,当您使用 Ansible 在 Junos 设备上执行操作时,必须在控制节点上本地执行 Ansible 模块。因此,Ansible 默认从 Ansible 控制节点(而非受管节点)收集事实。
瞻博网络提供了一个模块,您可以使用该模块从 Junos 设备收集设备事实,包括活动配置。 表 1 概述了可用的模块。该模块使用 Junos PyEZ 事实收集系统来检索设备事实。有关 Junos PyEZ 事实收集系统以及返回的字典键的完整列表的详细信息,请参阅 jnpr.junos.facts。
内容集 |
模块名称 |
---|---|
该 facts
模块返回字典中的 ansible_facts.junos
设备事实。该模块还允许您将返回的数据保存在本地 Ansible 控制节点上的文件中。若要指定保存检索信息的目录,请包含 savedir
模块参数,并定义目标目录的路径。当您包含 savedir
该参数时,playbook 将为每个设备生成以下文件,其中 hostname 是从设备检索到的事实的值,该值 hostname
可能与传递给模块的主机名不同:
-
hostname-facts.json - JSON 格式的设备事实
-
hostname-inventory.xml - XML 格式的设备硬件清单
例如,以下 playbook 将检索清单组中每台设备的设备事实,并将每台设备的数据保存在 Ansible 控制节点上 playbook 目录中的单独文件中。由于操作指南在本地运行 facts
模块,因此 Ansible 默认从控制节点收集事实。该操作指南包含一个参数, gather_facts: no
以防止 Ansible 从控制节点收集事实,而是使用该 juniper.device.facts
模块从托管设备检索事实。若要向设备进行身份验证,该示例使用默认位置中的现有 SSH 密钥,因此不会在操作指南中显式提供模块的凭据 facts
。
--- - name: Get device facts hosts: dc1 connection: local gather_facts: no tasks: - name: Retrieve device facts and save to file juniper.device.facts: savedir: "{{ playbook_dir }}"
默认情况下,facts
模块不会返回设备配置。要返回设备的活动配置,除了设备事实之外,config_format
还包括选项,并指定返回配置的格式。可接受的格式值为 'json'
、 'set'
'text'
和 'xml'
。设备上运行的 Junos OS 版本必须支持请求的格式。
包含该 config_format
选项时, ansible_facts.junos
模块响应中的字典会在单个多行字符串中包含 config
具有指定格式配置的密钥。但是,即使操作指南包含选项 savedir
,配置数据 也不会 写入文件。
要使用 Ansible 从 Junos 设备检索配置数据并将数据保存到文件中,请使用模块 config
而不是模块 facts
。有关更多信息,请参阅 使用 Ansible 检索或比较 Junos OS 配置。
下一个示例中的 playbook 将执行以下操作:
-
检索清单组中每个设备的设备事实和活动配置
-
将每个设备的事实和硬件库存保存在 Ansible 控制节点上 playbook 目录中的单独文件中
-
将每个设备的配置打印到标准输出
--- - name: Get device facts and configuration hosts: dc1 connection: local gather_facts: no tasks: - name: Retrieve device facts and configuration and save facts to file juniper.device.facts: savedir: "{{ playbook_dir }}" config_format: "xml" register: result - name: Print configuration ansible.builtin.debug: var: result.ansible_facts.junos.config
user@ansible-cn:~$ ansible-playbook facts.yaml PLAY [Get device facts and configurations] ********************************** TASK [Retrieve device facts and configuration and save facts to file] ******* ok: [dc1a.example.net] TASK [Print configuration] ************************************************** ok: [dc1a.example.net] => { "result.ansible_facts.junos.config": "<configuration commit-seconds=\"1605564153\" commit-localtime=\"2020-11-16 14:02:33 PST\" commit-user=\"admin\">\n <version>20191212.201431_builder.r1074901</version>\n [...output truncated...] </configuration>\n" } PLAY RECAP ****************************************************************** dc1a.example.net : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0