如何在Ansible中创建数组模板?

时间:2018-01-27 16:10:18

标签: ansible jinja2

我有一个模板文件config.j2

 {% for host in groups['dbs'] %}
 ips= {{ hostvars[host].ansible_default_ipv4.address }}
 {% endfor %}

我的输出是:

   ips= 192.168.231.91
   ips= 192.168.231.92
   ips= 192.168.231.93

我希望像这样保存在数组变量中:

ips=['192.168.231.91','192.168.231.92','192.168.231.93']

怎么做呢?

1 个答案:

答案 0 :(得分:0)

<强>解决方案

ips=[{{ groups['dbs'] | map("regex_replace", "(.*)", "'\\1'") | join(",") }}]

<强>解释

  1. 字符串ips[]直接打印在模板中;

  2. Jinja2表达式处理groups['dbs']列表:

    1. map filter将过滤器(regex_replace)应用于列表的各个元素;

    2. regex_replace filter用单引号括起每个列表元素(字符串);

    3. join filter将结果列表转换为输出中逗号分隔的字符串。