如何从本地服务器中的所有主机访问标准输出
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
我的剧本如下
- 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