Ste*_*eve 11 jinja2 ansible ansible-template ansible-2.x
我vars在我的ansible playbook中有以下内容我得到了以下结构
domains:
- { main: 'local1.com', sans: ['test.local1.com', 'test2.local.com'] }
- { main: 'local3.com' }
- { main: 'local4.com' }
Run Code Online (Sandbox Code Playgroud)
并且在我的内部有以下内容 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 %}
Run Code Online (Sandbox Code Playgroud)
现在,当我进入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"
Run Code Online (Sandbox Code Playgroud)
注意数组内部的usans.
兴奋的输出
[[acme.domains]]
main = "local1.com"
sans = ["test.local1.com", "test2.local.com"]
[[acme.domains]]
main = "local3.com"
[[acme.domains]]
main = "local4.com"
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何解决?
tec*_*raf 17
你得到的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 %}
Run Code Online (Sandbox Code Playgroud)
或者你可以依赖这样的事实,即后面的字符串输出sans =是一个JSON并to_json用过滤器渲染它:
{{ key }} = {{ value | to_json }}
Run Code Online (Sandbox Code Playgroud)
要么会得到你:
[[acme.domains]]
main = "local1.com"
sans = ["test.local1.com", "test2.local.com"]
[[acme.domains]]
main = "local3.com"
[[acme.domains]]
main = "local4.com"
Run Code Online (Sandbox Code Playgroud)
但第一个更通用.
| 归档时间: |
|
| 查看次数: |
16657 次 |
| 最近记录: |