Comment puis-je configurer /etc/hosts avec ansible orchestration

Des besoins de l'application suivants hôtes:

[foo-servers]
foo-server ansible_ssh_host=192.168.50.2 

[bar-servers]
bar-server ansible_ssh_host=192.168.50.3 

[mysql-servers]
mysql-server ansible_ssh_host=192.168.50.4 

[mongodb-servers]
mongodb-server ansible_ssh_host=192.168.50.5 

J'ai besoin de configurer des hôtes sur des foo serveur et serveur barre car ils ont besoin d'accéder à mysql et mongodb. Pour y parvenir, j'introduis un rôle hosts:

# roles/hosts/tasks/main.yml
---
- name: change hosts
template: src=hosts.j2 dest=/etc/hosts

# roles/hosts/templates/hosts.j2
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for item in hostvars %}
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }}
{% endfor %}

Le problème est que quand je lance

ansible-playbook foo.yml 

Le /etc/hosts sur la cible ne contient que l'adresse ip et le nom d'hôte de l'hôte actuel, foo-serveur dans ce cas.

Ma question est:

Comment puis-je obtenir tous les hôtes dans l'inventaire quand je lance playbook contre un seul d'entre eux?

Ou pourriez-vous suggérer quelques solutions de rechange que j'ai l'idée erronée à la première place.

Les alternatives me viennent à l'esprit sont:

Faire de configuration des hôtes d'une personne playbook à l'encontre de tous les hôtes comme

---
- name: Configuring hosts
  hosts: all
  user: root

  roles:
    - hosts

L'inconvénient est que j'ai besoin d'exécuter ce playbook avant les autres et cela ne semble pas une bonne façon de l'utiliser rôles.

OriginalL'auteur Yugang Zhou | 2014-11-14