Перенос элементов в переменную во время циклического перемещения по другой переменной в шаблоне Ansible Jinja2 - PullRequest
0 голосов
/ 08 июня 2018

Инвентарь:

[Test]
local ansible_host=localhost

[Test:vars]
my_clusters="A,B,C"

Я пытаюсь написать шаблон jinja2, повторяющийся по my_clusters var.В основном в Интернете я нашел способ итерации ниже (также здесь Цикл For в Ansible Template ):

{% for item in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{{item}}
{% endfor %}

, который производит вывод:

A
B
C

Но мойТребуется вывести строку «Кластер» (запятую в одной строке) столько раз, сколько нет.предметов в my_clusters вар.Ожидаемый результат:

Cluster,Cluster,Cluster

Я пробовал что-то вроде ниже.Но это не работает.

{% set str="" %}
{% for cluster in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{% str += "Cluster," %}
{% endfor %}
{{str}}

1 Ответ

0 голосов
/ 08 июня 2018

Этого можно достичь с помощью заданий, представленных в Jinja2. 2.10 :

{% set ns = namespace(str="") %}
{% for cluster in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{% set ns.str = ns.str + "Cluster" %}
{%- if not loop.last %}{% set ns.str = ns.str + "," %}{% endif %}
{% endfor %}

Выше приведен ответ на вопрос из заголовка, но в вашем коде есть некоторые синтаксические проблемы:

  • отсутствие set внутри выражения,
  • с использованием оператора +=,
  • без обработки последнего ,.
...