如何使用Ansible注册远程主机的事实?

时间:2016-03-25 18:12:04

标签: automation ansible ansible-2.x

我想将远程主机的事实注册到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

1 个答案:

答案 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