简体   繁体   中英

Ansible: Accumulate output across multiple hosts on task run

I have the following playbook

- hosts: all
  gather_facts: False
  tasks:
    - name: Check status of applications
      shell: somecommand
      register: result
      changed_when: False
      always_run: yes

After this task, I want to run a mail task that will mail the accumulated output of all the commands for the above task registered in the variable result . As of right now, when I try and do this, I get mailed for every single host. Is there some way to accumulate the output across multiple hosts and register that to a variable?

You can extract result from hostvars inside a run_once task:

- hosts: mygroup
  gather_facts: false
  tasks:
    - shell: date
      register: date_res
      changed_when: false
    - debug:
        msg: "{{ ansible_play_hosts | map('extract', hostvars, 'date_res') | map(attribute='stdout') | list }}"
      run_once: yes

This will print out a list of all date_res.stdout from all hosts in the current play and run this task only once.

While trying to copy the results of date_res.stdout to a file on host only single host data is copied not the all host's data is available

  • name: copy all copy: content: "{{ allhost_out.stdout }}" dest: "/ngs/app/user/outputsecond-{{ inventory_hostname }}.txt"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM