Jinja: получение значения str переменной за пределами for loop

2015-10-22

Долго ломал голову как это сделать, но не нашел более правильного решения.

{%- set dc_name = ['jotunheimr'] %}
{%- for s_group, s_details in pillar.get('server-groups', {}).items() %}
  {%- set s_srvs = pillar.get('server-groups', {}) %}
  {%- for srv in s_srvs[s_group] %}
    {%- if srv == grains['id'] %}
      {%- do dc_name.append(s_group) %}
    {%- endif %}
  {%- endfor %}
{%- endfor %}
{%- if dc_name|length > 1 %}
{%- endif %}
{%- set bacula_path = salt['pillar.get']('datacenters:%s:srv_ip' % dc_name|last, '127.0.0.1') %}

Итак пошагово.

Предполагаем, что у нас не может быть сервер-группы с именем jotunheimr. Создаем list с таким элементом.

Далее проверяем принадлежит ли наш сервер к какой-либо группе и если принадлежит, выполняем:

{%- do dc_name.append(s_group) %}

Таким образом в случае если наш сервер принадлежит к какой либо группе, мы получим список с двумя (или более) переменными.

Т.к. у меня задача была получить только одну сервер-группу, то в результате я просто делал dc_name|last, что давало мне последний элемент списка.

 

 

PythonПолезностиПрограммированиеjinjajinja dojinja listpythonsaltsaltstackwithin a for loop

NFSen и особенности автоматической очистки данных

OpenBSD: Fatal: building ports requires correctly installed X11