如何使用播放主机IP的ansible创建主机文件

时间:2016-03-14 16:31:57

标签: automation ansible ansible-2.x

我正在尝试使用以下任务创建主机文件。我在完全没有群组的机器上运行这个任务[' hadoop']。在这里,我想为群组[' hadoop']中的节点创建主机文件而不在群组中运行我的这个游戏[' hadoop']

- name: Update /etc/hosts
  lineinfile: dest=/etc/hosts
          regexp='.*{{ item }}$'
          line="{{ hostvars[item].ansible_default_ipv4.address }} {{item}}"
          state=present
  when: hostvars[item].ansible_default_ipv4.address is defined
  with_items: groups['hadoop']
  tags:
    - etc-hosts

我尝试了这一点,但它没有奏效,只有在我的播放主机中有群组[' hadoop']时才有效。

任何人都知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

Ansible将通过设置模块检测IP等事实。默认情况下,这是作为游戏处理的那些主机上游戏​​的第一个任务执行的。因此Ansible只知道有关当前剧本主持人的事实。不是游戏的一部分 - >没有详细信息。

要解决此问题,您有两种选择。

1)添加没有任务的游戏,只是为了在hadoop主机上运行安装模块。

---

 - hosts: hadoop
   gather_facts: yes

 - hosts: other hosts
   tasks: your actual tasks here

...

2)启用fact caching。正如其名称所示,事实缓存为Ansible提供了一种记忆当前剧本中未处理的主机事实的方法。为此,您需要在本地或网络上可用的某个位置设置redis实例。