2017-01-07 66 views
7

Mam następujący vars wewnątrz mojego ansibl playbook Mam następującą strukturęansibl szablon dodaje „u” do tablicy w szablonie

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

i mają następujące wewnątrz mojego 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 %} 

Teraz, gdy przejdę do VM i zobaczę plik, otrzymuję:

Wyjście

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

Zawiadomienie U wewnątrz tablicy sans.

Excpeted wyjście

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

Dlaczego tak się dzieje i jak można to naprawić?

Odpowiedz

9

Otrzymujesz u' ', ponieważ drukujesz obiekt zawierający ciągi Unicode i tak domyślnie renderuje je Python.

można filtrować je list | join filtrów:

{% 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 %} 

Czy można polegać na tym, że wyjście ciąg po sans = jest JSON i czynią ją to_json Filtr:

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

Otrzymasz:

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

Ale f irst jeden jest bardziej wszechstronny.

+0

To działa, dziękuję za pomoc. – Steve