我想将远程主机的事实注册到var中,然后在下一个任务中迭代var。但是我坚持用主机名[hostname:IP]注册事实的第一项任务。以下是我的代码:
- name: get facts
setup:
delegate_to: "{{item}}"
delegate_facts: True
with_items: "{{ groups['hadoop'] }}"
register: hadoop_ips
tags:
- etc-hosts
- debug: msg={{ hadoop_ips }}
tags:
- etc-hosts
答案 0 :(得分:3)
如果您想获取有关主机的Ansible事实,您应该在主机上收集事实后使用hostvars
来访问它们。
如果您的剧本已经收集了您感兴趣的主持人的事实,或者您正在使用fact caching并且缓存包含有关主机的事实,那么您可以直接使用hostvars
。如果没有,那么您将需要使用与您的问题相同的委派setup
任务。
因此,如果您想获取当前剧本未定位的另一个组中某些主机的默认IP地址,您可能会遇到以下情况:
- name: get facts
setup:
delegate_to: "{{item}}"
delegate_facts: True
with_items: "{{ groups['hadoop'] }}"
tags:
- etc-hosts
- debug: var={{ hostvars[item]['ansible_eth0']['ipv4']['address'] }}
with_items: "{{ groups['hadoop'] }}"
tags:
- etc-hosts