使用 Ansible 从 Junos 设备检索事实
瞻博网络支持使用 Ansible 管理 Junos 设备,并提供了使您能够在设备上执行操作和配置任务的 Ansible 模块。这些模块不需要在受管设备上使用 Python,因为它们使用 Junos PyEZ 和基于 NETCONF 的 Junos XML API 与设备交互。因此,使用 Ansible 在 Junos 设备上执行操作时,必须在控制节点上本地执行 Ansible 模块。因此,Ansible 默认从 Ansible 控制节点而不是托管式节点收集事实。
瞻博网络提供的模块使您能够从 Junos 设备收集设备事实,包括活动配置。 表 1 概述了可用的模块。这些模块使用 Junos PyEZ 事实收集系统来检索设备事实。有关 Junos PyEZ 事实收集系统和返回的字典密钥的完整列表的详细信息,请参阅 jnpr.junos.facts。
内容集 |
模块名称 |
---|---|
facts
和juniper_junos_facts
模块返回字典中的ansible_facts.junos
设备事实。这些模块还允许您将返回的数据保存在本地 Ansible 控制节点上的文件中。若要指定保存检索到的信息的目录,请包含savedir
模块参数,并定义目标目录的路径。包含savedir
参数时,playbook 会为每个设备生成以下文件,其中hostname是从设备检索到的事实的值hostname
,可能与传递给模块的主机名不同:
-
hostname-facts.json - JSON 格式的设备事实
-
hostname-inventory.xml - XML 格式的设备硬件清单
例如,以下 playbook 检索清单组中每个设备的设备事实,并将每个设备的数据保存在 Ansible 控制节点上 playbook 目录中的单独文件中。由于该手册在本地运行瞻博网络模块,因此 Ansible 默认从控制节点收集事实。该手册包含防止 gather_facts: no
Ansible 从控制节点收集事实的参数,而是使用 facts
集合中的 juniper.device
模块从托管设备检索事实。若要向设备进行身份验证,该示例使用默认位置中的现有 SSH 密钥,因此不会在 playbook 中显式提供模块的 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
和juniper_junos_facts
模块不返回设备配置。要返回设备的活动配置,除了设备事实之外,还包括该config_format
选项,并指定返回配置的格式。可接受的格式值为 'json'
、 'set'
'text'
和 'xml'
。设备上运行的 Junos OS 版本必须支持请求的格式。
包含该config_format
选项时,模块响应config
中的字典会将ansible_facts.junos
具有指定格式的配置的键包含在单个多行字符串中。如果包含该savedir
选项,则配置数据不会写入文件。
要使用 Ansible 从 Junos 设备检索配置数据并将数据保存到文件中, config
请使用 or juniper_junos_config
模块而不是 facts
or juniper_junos_facts
模块。有关更多信息,请参阅 使用 Ansible 检索或比较 Junos OS 配置。
下一个示例中的 playbook 执行以下操作:
-
检索清单组中每个设备的设备事实和活动配置
-
将每台设备的事实和硬件库存保存在 Ansible 控制节点上剧本目录中的单独文件中
-
将每个设备的配置打印到标准输出
--- - 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 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