2016-02-01 1 views
1

Я использую Vagrant с Ansible. В моей PlayBook У меня есть следующие переменные:Несущие узлы IP как одна строка

seeds: '192.168.56.11,192.168.56.12' 

192.168.56.11 и 192.168.56.12 здесь являются IP-адреса нескольких машин конфигурации Vagrant.

Могу ли я сделать свою конфигурацию более гибкой, используя Ansible i.e. Может ли Ansible написать эту строку программно для меня?

ответ

1

Вы можете использовать Jinja2 для шаблона вашей переменной из других переменных.

Так что, если у нас есть список вещей, как это:

seeds: 
- 192.168.56.11 
- 192.168.56.12 

Мы можем превратить это в запятая строку с разделителями по looping через него с чем-то вроде этого:

seeds_string: '{% for seed in seeds %} {{ seed }}{% if not loop.last %},{% endif %}{% endfor %}' 

Что касается получения IP-адреса хостов в вашем инвентаре, мы можем получить доступ к фактам о других хостах, чем тот, который настроен с помощью the groups and hostvars magic variables.

Так, чтобы получить IP-адреса всех хостов в инвентаре мы могли бы использовать что-то вроде:

{% for host in groups['all'] %} 
    {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} 
{% endfor %} 

Объединяя это вместе мы можем сделать что-то вроде этого:

seeds: '{% for host in groups['all'] %} {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}{% if not loop.last %},{% endif %}{% endfor %}' 
+0

Спасибо большое, это именно то, что я искал. Просто проверил его в моем проекте, он работает как шарм. – sashaegorov

Смежные вопросы