Приложению требуются следующие хосты:
[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
Мне нужно настроить хосты на сервере foo и bar server, поскольку им нужен доступ к mysql и mongodb. Для этого я ввел роль с именем 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 %}
Проблема в том, когда я бегу
ansible-playbook foo.yml
/ Etc / hosts на целевом сервере содержит только ip и имя хоста текущего хоста, в данном случае foo-server.
У меня вопрос:
Как я могу получить все хосты в инвентаре, если я запускаю playbook только против одного из них?
Или вы могли бы предложить какие-то альтернативы, поскольку я изначально неправильно понимаю.
Мне приходят в голову альтернативы:
Сделайте конфигурацию хостов индивидуальной программой для всех хостов, например
---
- name: Configuring hosts
hosts: all
user: root
roles:
- hosts
Недостаток в том, что мне нужно запускать эту пьесу раньше других, и это кажется неправильным способом использования ролей.