私のansibleプレイブックの中に次の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 %}
VMに移動してファイルを見ると、次のようになります。
出力
[[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
配列内のに注意してください。
除外された出力
[[acme.domains]]
main = "local1.com"
sans = ["test.local1.com", "test2.local.com"]
[[acme.domains]]
main = "local3.com"
[[acme.domains]]
main = "local4.com"
なぜこれが起こっているのですか、どうすれば修正できますか?
Unicode文字列を含むオブジェクトを印刷するため、u' '
を取得します。これは、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"
しかし、最初のものはより汎用性があります。