Различные значения переменных для каждого хоста в группе в ansible - PullRequest
1 голос
/ 07 мая 2020

У меня есть роль в ansible, которая ожидает разные переменные. Я хочу применить эту роль к группе хостов, но каждому хосту в группе нужны разные значения для этой роли.

Я попытался заархивировать это с помощью этой конфигурации: Group Var:

host1: 
   var1: 'project a'
   var2: 'some other'

host2: 
   var1: 'project b'
   var2: 'some different'

hosts:

[myHosts]
host1
host2

Но я понятия не имею, как я могу l oop к разным хостам в игре

#something before

- hosts: myHosts
  become: true
  roles:
  - docker
  - docker-compose
  - git
  vars:
  - var1: ??
  # Something like this possible? 
  - var2: currentHost.var2

Или моя попытка неверна и я использую неверный инструмент? Эта роль - последний этап развертывания. Итак, в vars я хочу сказать что-то вроде стать проектом а или стать проектом б. Будет ли это плохой практикой? Должен ли я иметь ролевой проект a, проект b и назначить их конкретному хосту c через playbook, даже если единственная разница между двумя ролями - это некоторые переменные env?

1 Ответ

1 голос
/ 07 мая 2020

Чтобы исправить код, лучше поместить переменные в словарь. Например,

shell> cat group_vars/myhosts.yml
my_dict:
  host1: 
    var1: 'project a'
    var2: 'some other'
  host2: 
    var1: 'project b'
    var2: 'some different'

Тогда переменные можно легко «присвоить» каждому хосту

- hosts: myhosts
  vars:
    var1: "{{ my_dict[inventory_hostname]['var1'] }}"
    var2: "{{ my_dict[inventory_hostname]['var2'] }}"

Однако лучше всего поместить такие переменные в host_vars и пусть Ansible автоматически "присваивает" переменные хостам. Например,

shell> cat host_vars/host1.yml
var1: 'project a'
var2: 'some other'

shell> cat host_vars/host2.yml
var1: 'project b'
var2: 'some different'

См. Переменные группы и хоста .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...