2017-01-07 8 views
7

में सरणी के लिए 'यू' कहते हैं मैं है निम्नलिखित vars मेरी ansible प्लेबुक के अंदर मैं निम्नलिखित संरचनाAnsible टेम्पलेट टेम्पलेट

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' ' मिलता है क्योंकि आप यूनिकोड स्ट्रिंग वाले ऑब्जेक्ट को प्रिंट करते हैं और इस प्रकार पाइथन इसे डिफ़ॉल्ट रूप से प्रस्तुत करता है।

आप 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" 

लेकिन च प्यास एक बहुमुखी है।

+0

यह काम करता है, आपकी मदद के लिए धन्यवाद। – Steve