使用Ansible,在我的角色中,我定义了一个变量(defaults/main.yml
):
someHosts: "[ \"{{ hosts| join(':' + port + '\", \"') }}:{{ port }}\" ]"
基本上给出hosts=["host1", "host2"]
和port=5050
的意味着将上述内容转换为:
["host1:5050", "host2:5050"]
不,我在带有*.j2
模块的jinja2模板文件(template
)中使用它。我的模板文件包含以下行:
hosts => {{ someHosts }}
但现在运行后我在实际机器上看到以下内容(less
):
['host1:5050', 'host2:5050']
为什么在地球上它是如何将双引号改为单引号?
EDIT / ANSWER
基于@ techraf的答案,这就是我提出的:
someHosts: "{{ hosts | zip_longest([], fillvalue=':' + port) | map('join') | list | to_json }}"
答案 0 :(得分:3)
为什么在地球上它是如何将双引号改为单引号?
因为您创建的列表对象不是字符串;这就是Jinja2呈现字符串列表的方式。
通过添加:
自行查看- debug:
var: someHosts|type_debug
你得到:
ok: [localhost] => {
"someHosts|type_debug": "list"
}
但是,如果您的问题是如何以JSON格式获取该列表,那么您的模板应为:
hosts => {{ someHosts | to_json }}
答案 1 :(得分:1)
如果使用模板:
[{% for host in groups['mygroup']%}
"{{ host }}:{{port}}"{% if not loop.last %},{% endif %}
{% endfor %}]
您所要做的就是与您的小组定义或替换我的小组。