我想在多个主机上运行Ansible playbook并将输出注册到变量。现在使用这个变量,我想将输出复制到单个文件。问题是最终文件中只有一个主机的输出。如何一个接一个地添加文件中所有主机的输出。我不想使用serial = 1
,因为如果我们有多个主机,它会大大降低执行速度。
-
hosts: all
remote_user: cisco
connection: local
gather_facts: no
vars_files:
- group_vars/passwords.yml
tasks:
- name: Show command collection
ntc_show_command:
connection: ssh
template_dir: /ntc-ansible/ntc-templates/templates
platform: cisco_ios
host: "{{ inventory_hostname }}"
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
command: "{{commands}}"
register: result
- local_action:
copy content="{{result.response}}" dest='/home/user/show_cmd_ouput.txt'
答案 0 :(得分:2)
result
变量将在运行任务ntc_show_command
的每台主机上注册为事实,因此您应通过hostvars
字典访问该值。
- local_action:
module: copy
content: "{{ groups['all'] | map('extract', hostvars, 'result') | map(attribute='response') | list }}"
dest: /home/user/show_cmd_ouput.txt
run_once: true
您还需要run_once
,因为该操作仍会与该组中的主机一起运行多次。