如何从本地服务器中的所有主机访问stdout

时间:2018-12-26 04:13:42

标签: ansible ansible-inventory ansible-facts

我的剧本如下

- 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个主机stdout?

1 个答案:

答案 0 :(得分:0)

  

如何从单个变量访问所有10个主机标准输出?

是的,先使用map("extract"),然后使用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
相关问题