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

Zee*_*Zee 3 ansible

我有以下剧本

- hosts: all
  gather_facts: False
  tasks:
    - name: Check status of applications
      shell: somecommand
      register: result
      changed_when: False
      always_run: yes
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*rov 7

您可以从结果中提取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
Run Code Online (Sandbox Code Playgroud)

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

  • `run_once` 在第一台主机上运行,​​对吗?如果调试部分在第一个主机而不是最后一个主机上运行,​​那么如何从每个主机获取变量? (2认同)