2017-01-07 17 views
7

Tôi đã sau vars bên trong playbook ansible của tôi, tôi có cơ cấu như sauAnsible mẫu thêm 'u' để mảng trong mẫu

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

Và đã sau bên trong của tôi 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 %} 

Bây giờ khi tôi vào máy ảo và xem tệp tôi nhận được thông tin sau:

Đầu ra

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

Thông báo các u bên trong mảng sans.

Excpeted đầu ra

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

Tại sao điều này xảy ra và làm thế nào tôi có thể sửa chữa nó?

Trả lời

9

Bạn nhận được u' ' vì bạn in đối tượng có chứa chuỗi Unicode và đây là cách Python hiển thị theo mặc định.

Bạn có thể lọc nó với list | join lọc:

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

Hoặc bạn có thể dựa vào thực tế, rằng đầu ra chuỗi sau sans = là một JSON và làm cho nó với to_json lọc:

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

Hoặc sẽ giúp bạn:

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

Nhưng f irst một là linh hoạt hơn.

+0

Điều đó có hiệu quả, cảm ơn sự giúp đỡ của bạn. – Steve

Các vấn đề liên quan