Ansible节点IP作为一个字符串

时间:2016-02-01 17:01:51

标签: vagrant ansible

我使用Vagrant和Ansible。在我的剧本中,我有以下变量:

seeds: '192.168.56.11,192.168.56.12'

192.168.56.11192.168.56.12这里是多机Vagrant配置的IP地址。

我可以使用Ansible更灵活地配置,即Ansible可以编程方式为我编写此字符串吗?

1 个答案:

答案 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 %}'