Ansible Playbook-在for循环中传递变量

时间:2016-04-17 16:29:01

标签: ansible ansible-playbook

我正在尝试根据主机数创建tomcat集群,我正在尝试将变量传递给模板文件中的for循环。

我想从变量中控制num_hosts

模板文件片段为:

{% for id in range(1,( {{ num_hosts }} )) %}
    <Member
       className="org.apache.catalina.tribes.membership.StaticMember"
       port="4110"
       host="${test.server.web.other{{ id }}.fqdn}"
       domain="delta-static"
    />
{% endfor %}

得到以下错误

fatal: [test-web01.aliceapp.com]: FAILED! =>
{"changed": false,
"failed": true,
"invocation": {"module_args": {"dest": "/home/tomcat/apache-tomcat/conf/server.xml", "src": "test/server.j2"}, "module_name": "template"},
"msg": "AnsibleError: an unexpected type error occurred. Error was an integer is required"}

我尝试了多种语法组合,但是没有一种语法能够正常工作。

2 个答案:

答案 0 :(得分:1)

range访问整数作为参数,但jinja将默认将所有内容转换为字符串。您可以使用int内置的jinja2过滤器将值转换为整数:

{% for id in range(1,( {{ num_hosts | int }} )) %}

答案 1 :(得分:1)

最后能够使用以下语法。

{%in range in range(1,(num_hosts | int))%}