Ansible:在任务运行时累积多个主机的输出

时间:2017-05-10 21:37:28

标签: ansible

我有以下剧本

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

完成此任务后,我想运行一个邮件任务,该邮件任务将邮寄已在变量结果中注册的上述任务的所有命令的累计输出。截至目前,当我尝试这样做时,我会收到每个主机的邮件。有没有办法在多个主机上累积输出并将其注册到变量?

1 个答案:

答案 0 :(得分:6)

您可以从hostvars任务中提取run_once的结果:

- 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

这将打印出当前播放中所有主机的所有date_res.stdout的列表,并仅运行此任务一次。