Ansible yml更改引号

Ansible yml更改引号,ansible,yaml,jinja2,Ansible,Yaml,Jinja2,在我的角色中,我使用Ansible定义了一个变量(defaults/main.yml): 基本上,给定的hosts=[“host1”、“host2”]和port=5050旨在将上述内容转化为: ["host1:5050", "host2:5050"] 不,我在我的jinja2模板文件(*.j2)和模板模块中使用它。我的模板文件包含以下行: hosts => {{ someHosts }} 但是现在在运行它之后,我在实际机器上看到了以下内容(使用更少的): 到底为什么?它是如何将双引

在我的角色中,我使用Ansible定义了一个变量(
defaults/main.yml
):

基本上,给定的
hosts=[“host1”、“host2”]
port=5050
旨在将上述内容转化为:

["host1:5050", "host2:5050"]
不,我在我的jinja2模板文件(
*.j2
)和
模板
模块中使用它。我的模板文件包含以下行:

  hosts => {{ someHosts }}
但是现在在运行它之后,我在实际机器上看到了以下内容(使用
更少的
):

到底为什么?它是如何将双引号改为单引号的

编辑/回答

基于@techraf的回答,我得出了以下结论:

someHosts: "{{ hosts | zip_longest([], fillvalue=':' + port) | map('join') | list | to_json }}"
到底为什么?它是如何将双引号改为单引号的

因为您创建了一个列表对象而不是字符串;这就是Jinja2呈现字符串列表的方式

通过添加以下内容,自己查看:

- debug:
    var: someHosts|type_debug
你会得到:

ok: [localhost] => {
    "someHosts|type_debug": "list"
}

但是,如果您的问题是如何获得JSON格式的列表,那么您的模板应该是:

hosts => {{ someHosts | to_json }}
到底为什么?它是如何将双引号改为单引号的

因为您创建了一个列表对象而不是字符串;这就是Jinja2呈现字符串列表的方式

通过添加以下内容,自己查看:

- debug:
    var: someHosts|type_debug
你会得到:

ok: [localhost] => {
    "someHosts|type_debug": "list"
}

但是,如果您的问题是如何获得JSON格式的列表,那么您的模板应该是:

hosts => {{ someHosts | to_json }}
如果使用模板:

[{% for host in groups['mygroup']%}
    "{{ host }}:{{port}}"{% if not loop.last %},{% endif %}
 {% endfor %}]
您所要做的就是用您的组定义或替换mygroup。

如果使用模板:

[{% for host in groups['mygroup']%}
    "{{ host }}:{{port}}"{% if not loop.last %},{% endif %}
 {% endfor %}]
您所要做的就是用您的组定义或替换mygroup