我正在使用Ansible 1.9.2设置群集服务,并且需要配置一个JSON配置文件,其中包含要加入的群集服务器列表。
目前,我的工作如下。它产生正确的,如果丑陋的输出。
{
...
"join": [
{% for host in groups['cluster'] %}
"{{ hostvars[host]['ansible_default_ipv4']['address'] }}{% if not loop.last %}, {% endif %}
{% endfor %}
],
...
}
Ansible是否可以创建特定主机事实的列表,或者Jinja是否可以动态编写列表?我希望能在我的模板中留下这样的东西:
{
...
"join": {{ list_of_cluster_ips|to_nice_json }},
...
}
我在模板文件的顶部尝试了一些Jinja魔法来生成如下列表:
{% set list_of_cluster_ips = [] %}
{% for host in groups['cluster'] %}
{% do list_of_cluster_ips.append(host) %}
{% endfor %}
{
...
"join": {{ list_of_cluster_ips|to_nice_json }},
...
}
但Ansible不支持Jinja的'do'功能,并且fatal: [cluster-1] => {'msg': "AnsibleError: file: <template>, line number: 3, error: Encountered unknown tag 'do'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.", 'failed': True}
失败。
Ansible有没有办法生成可以在模板中使用的列表?
答案 0 :(得分:1)
试试这个:
{%- set list_of_cluster_ips = [] %}
{%- for host in groups['cluster'] %}
{%- if list_of_cluster_ips.append(hostvars[host]['ansible_default_ipv4']['address']) %}
{%- endif %}
{%- endfor %}
{
...
"join": {{ list_of_cluster_ips|to_nice_json }},
...
}