我的剧本如下
- 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?
答案 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