2016-03-14 1 views
0

Я пытаюсь создать файл hosts с следующей задачей. Я выполняю эту задачу на машинах совершенно из групп ['hadoop']. Здесь я хочу, чтобы создать файл хостов для узлов из групп [ «Hadoop»], не запуская свою пьесу на группы [ «»] HadoopКак создать файл хоста с доступными хостами воспроизведения IP

- 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

Ansible обнаруживает такие факты, как IP, через установочный модуль. Это по умолчанию выполняется как первая задача игры на тех хостах, которые будут обработаны игрой. Поэтому Ansible знает только факты о хозяевах текущей игры. Не входит в игру -> нет доступных данных.

Для решения этой проблемы у вас есть два варианта.

1) Добавьте игру без задач, просто чтобы запустить модуль настройки на хостах hadoop.

--- 

- hosts: hadoop 
    gather_facts: yes 

- hosts: other hosts 
    tasks: your actual tasks here 

... 

2) Включить fact caching. Кэширование фактов, как следует из названия, дает возможность Ansible запомнить факты о том, что хосты он не обрабатывал в текущей пьесе. Для этого вам нужно будет настроить экземпляр redis локально или где-нибудь в сети.