2016-04-17 4 views
3

Я пытаюсь создать кластер tomcat на основе количества хостов, и я пытаюсь передать переменные в цикл for в файле шаблона.Ansible Playbook- Передать переменные in for loop

Я хочу контролировать 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"} 

Я попробовал несколько сочетание синтаксисах, личинка ни один из них не работают.

+0

пожалуйста, включите часть пьес вы используете здесь, а – SztupY

ответ

1

Наконец смог заставить его работать со следующим синтаксисом.

{% для ид в диапазоне (1, (num_hosts | INT))%}

1

range accespts integers как его параметры, но jinja будет по умолчанию преобразовывать все в строку. Вы можете использовать int встроенный в jinja2 фильтр для преобразования значений в целое:

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