使用 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