gpt4 book ai didi

Ansible 模板将 'u' 添加到模板中的数组

转载 作者:行者123 更新时间:2023-12-04 00:46:31 24 4
gpt4 key购买 nike

我有以下 vars在我的 ansible playbook 中,我得到了以下结构

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"

请注意 u 内部 sans大批。

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

为什么会发生这种情况,我该如何解决?

最佳答案

你得到 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 %}

或者你可以依赖这样一个事实,即 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"

但第一个更通用。

关于Ansible 模板将 'u' 添加到模板中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com