Создайте строку, используя шаблон Jinja2 - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу преобразовать эту переменную:

default_attr:
    attr1    :
    - "1"
    nexatt  :
    - "b"
 ...

в "attr = 1, nextattr = b, ..." (строка, разделенная i.e.comma) с использованием шаблона Jinja. Есть ли способ сделать это?

- name: Reading the attributes
  set_fact:
    app_attributes: |
        {% set attributes = " " -%}
        {% for key in default_attr.keys() -%}
           {% for value in default_attr[key] -%}
               {% attributes: "{{ attributes }} + [{'key=value'}]" -%}
           {%- endfor %}
        {%- endfor %}
        {{ attributes }}

Ошибка, которую я получаю, показана ниже:

fatal: [dev1]: FAILED! => {"msg": "template error while templating string: Encountered unknown tag 'attributes'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.. String: {% set attributes = \" \" -%}\n{% for key in default_attr.keys() -%}\n   {% for value in default_attr[key] -%}\n       {% attributes: \"{{ attributes }} + [{'key=value'}]\" -%}\n   {%- endfor %}\n{%- endfor %}\n{{ attributes }}\n"}

Есть ли способ построить эту строку с помощью Jinja?

1 Ответ

0 голосов
/ 09 ноября 2018

Это немного грязный способ, но ради ответа приведенный ниже фрагмент должен работать для того, что вы описали. Одна из проблем заключается в том, что вы не указали, что произойдет, если в списке attr1 или любом другом списке attr будет более одного элемента. Этот фрагмент будет работать, если в каждом списке есть только один элемент.

- set_fact:
    default_attr:
        attr1    :
        - "1"
        nexatt  :
        - "b"
- set_fact: app_attributes="{{ default_attr | to_json | regex_replace('\:\ ','=') | regex_replace('[\[\]{}\"]') }}"
- debug: var=app_attributes
...