2017-01-07 1 views
7

У меня есть следующие vars внутри моего анзибль пьес я получил следующую структуруанзибль шаблон добавляет «и» массив в шаблоне

domains: 
    - { main: 'local1.com', sans: ['test.local1.com', 'test2.local.com'] } 
    - { main: 'local3.com' } 
    - { main: 'local4.com' } 

и имеют следующие внутри моей conf.j2

{% for domain in domains %} 
    [[acme.domains]] 

    {% for key, value in domain.iteritems() %} 
     {% if value is string %} 
     {{ key }} = "{{ value }}" 
     {% else %} 
     {{ key }} = {{ value }} 
     {% endif %} 
    {% endfor %} 
{% endfor %} 

Теперь, когда я иду на виртуальную машину и вижу файл, я получаю следующее:

Выход

[[acme.domains]] 
    main = "local1.com 
    sans = [u'test.local1.com', u'test2.local.com'] 
[[acme.domains]] 
    main = "local3.com" 
[[acme.domains]] 
    main = "local4.com" 

Обратите внимание на у внутри sans массива.

Excpeted выход

[[acme.domains]] 
    main = "local1.com" 
    sans = ["test.local1.com", "test2.local.com"] 
[[acme.domains]] 
    main = "local3.com" 
[[acme.domains]] 
    main = "local4.com" 

Почему это происходит и как я могу это исправить?

ответ

9

Вы получаете u' ', потому что вы печатаете объект, содержащий строки Unicode, и это то, как Python предоставляет его по умолчанию.

Вы можете фильтровать с list | join фильтрами:

{% for domain in domains %} 
[[acme.domains]] 
{% for key, value in domain.iteritems() %} 
{% if value is string %} 
    {{ key }} = "{{ value }}" 
{% else %} 
    {{ key }} = ["{{ value | list | join ("\",\"") }}"] 
{% endif %} 
{% endfor %} 
{% endfor %} 

Или вы можете рассчитывать на то, что строка вывода после sans = является JSON и сделать это с to_json фильтром:

{{ key }} = {{ value | to_json }} 

Либо вы получите:

[[acme.domains]] 
    main = "local1.com" 
    sans = ["test.local1.com", "test2.local.com"] 
[[acme.domains]] 
    main = "local3.com" 
[[acme.domains]] 
    main = "local4.com" 

Но f Первый - более универсальный.

+0

Это работает, спасибо вам за помощь. – Steve

Смежные вопросы