1

我想将远程主机的事实注册到 var 中,然后在下一个任务中迭代 var。但我被困在使用主机名 [主机名: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
4

1 回答 1

3

如果您想获取有关主机的 Ansible 事实,您应该hostvars在收集主机上的事实后使用它们来访问它们。

如果您的剧本已经为您感兴趣的主机收集了事实,或者您正在使用事实缓存并且缓存包含有关主机的事实,那么您可以直接使用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
于 2016-03-25T21:24:50.140 回答