我正在尝试使用以下任务创建主机文件。我在完全没有群组的机器上运行这个任务[' 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']时才有效。
任何人都知道我在这里做错了吗?
答案 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实例。