ansible多个每主机输出到文件

时间:2017-09-18 01:44:22

标签: ansible

我想在多个主机上运行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'

1 个答案:

答案 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,因为该操作仍会与该组中的主机一起运行多次。