问题:鉴于 Ansible 的性质,我有 2 个任务按(预期)顺序执行。据我了解,每个任务只能执行一个模块。
任务 1 - 从网络设备收集事实信息(序列号、版本等)。
任务 2 - 使用任务 1 中收集的信息呈现模板
理想结果:由于我正在循环访问大量网络设备,我的理想结果是一次选择一个设备,从中收集信息,然后使用该信息渲染模板,然后转到循环中的另一个设备,然后很快。
方法:我想保持相同的语法,在任务 1 上将事实保存在文件 (.json) 中,在任务 2 上,读取 JSON 文件并获取我感兴趣的变量。
有没有更好的方法来做到这一点?(应该不止一个)
我目前所拥有的不符合我的目的,因为模板呈现时,它只包含有关最后一个设备的信息:
任务:角色/juniper.junos/tasks/main.yaml
- name: 1 - Gathering Facts
junos_get_facts:
host: "{{ inventory_hostname}}"
user: ""
passwd: ""
savedir: "~/Ansible/Ouput/Facts"
ignore_errors: True
register: junos
- name: 2 - Creating the template
template:
src="~/Ansible/roles/juniper.junos/templates/template.j2"
dest="~/Ansible/Ouput/Facts/Device_facts.yml"
模板:~/Ansible/roles/juniper.junos/templates/template.j2
{% for host in groups['OOB_AMS'] %}
ANSIBLE NAME: {{ inventory_hostname}}
HOSTNAME: {{ junos.facts.hostname }}
MODEL: {{ junos.facts.model }}
SERIAL: {{ junos.facts.serialnumber }}
VERSION: {{ junos.facts.model }}
UP TIME: {{ junos.facts.RE0.up_time }}
{% endfor %}
理想输出:“~/Ansible/Ouput/Facts/Device_facts.yml”
ANSIBLE NAME: DEVICE 1
HOSTNAME: DEVICE 1 HOSTNAME
MODEL: DEVICE 1 MODEL
SERIAL: DEVICE 1 SERIAL
VERSION: DEVICE 1 VERSION
UP TIME: DEVICE 1 UP TIME
ANSIBLE NAME: DEVICE 2
HOSTNAME: DEVICE 2 HOSTNAME
MODEL: DEVICE 2 MODEL
SERIAL: DEVICE 2 SERIAL
VERSION: DEVICE 2 VERSION
UP TIME: DEVICE 2 UP TIME
ANSIBLE NAME: DEVICE 3
HOSTNAME: DEVICE 3 HOSTNAME
MODEL: DEVICE 3 MODEL
SERIAL: DEVICE 3 SERIAL
VERSION: DEVICE 3 VERSION
UP TIME: DEVICE 3 UP TIME