Last comma

jinja как не ставить последнюю запятую в цикле

дано: переменная с количеством серверов

задача: составить строку вида

zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka

в целом решается простым циклом for + 2 небольших нюанса:

1) вместо последней запятой стоит /kafka

2) необходимо убрать newline который добавляется на каждом проходе

Решение:

zookeeper.connect=
{%- for server in range(servers_count) -%}
zookeeper{{ server+1 }}:2181{% if not loop.last %},{% endif %}
{%- endfor %}/kafka

все довольно просто - запятая ставится конструкцией, {% if not loop.last %}, {% enfif %} а переносы строк убираются постановкой дефиса у открывающих и закрывающих тегов {% и %}

з.ы. счет начинается с нуля, поэтому для красоты именования серверов инкрементирую переменную server.

з.з.ы еще подсказали вот такой способ:

zookeeper.connect={{ range(1, servers_count + 1) | map('regex_replace', '^(.*)$', 'zookeeper\\1:2181') | join(',') }}/kafka

Скамуниздил: https://t.me/bykvaadm/1637

Last updated