我使用Vagrant和Ansible。在我的剧本中,我有以下变量:
seeds: '192.168.56.11,192.168.56.12'
192.168.56.11
和192.168.56.12
这里是多机Vagrant配置的IP地址。
我可以使用Ansible更灵活地配置,即Ansible可以编程方式为我编写此字符串吗?
答案 0 :(得分: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访问有关其他主机的事实,而不是使用http://www.example.com/critical_app_settings.php配置的主机。
因此,要获取清单中所有主机的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 %}'