如何从本地服务器中的所有主机访问标准输出

How to access stdout from all hosts in a localserver

我的剧本如下

- hosts: nodes
  become: yes
  tasks:
  - name: Run Shell Script to get IPs with 4xx and 5xx errors

    script: /home/ubuntu/ips.sh
    args:
      chdir: /home/ubuntu
    register: ips

  - name:
    shell: echo  "{{ hostvars[groups['nodes'][0]].ips.stdout}}" > pip.txt
    delegate_to: localhost

有 10 个 ansible 主机。有没有一种方法可以让我从本地服务器的所有 10 台主机访问 Ips.stdout。我可以通过上述命令获得第一台主机。如何从单个变量访问所有 10 个主机标准输出?

How can I access all 10 hosts stdout from a single variable?

是,使用 map("extract") followed by map(attribute=):

- shell: echo "{{ groups.nodes | map('extract', hostvars, 'ips') | map(attribute='stdout') | join(', ') }}" > pip.txt
  delegate_to: localhost
  run_once: true

你会想要 run_once: true 否则,是的,它会委托给你的本地机器,但它也会为清单中的每个主机执行一次该操作,这很浪费。

如果你有兴趣,你也可以使用 copy: 让它更容易理解,因为如果它知道内容没有改变,它实际上不会改变你的文件:

- copy:
    dest: pip.txt
    content: "{{ groups.nodes | map('extract', hostvars, 'ips') | map(attribute='stdout') | join(', ') }}"
  delegate_to: localhost
  run_once: true