如何删除ansible-template中行尾的逗号?

How to remove the comma at the end of the line in ansible-template?

你能告诉我如何去掉行尾的逗号吗?

最终输出:

{name: "name1", 我的国家 = "region1a", 我的国家 = "region1b"},

{name: "name2", 我的国家 = "region2a", 我的国家 = "region2b"},

您只需删除第二行末尾的一个(突出显示的)逗号即可。 输出是这样生成的

{% for country in AllСountry %}
{name: "{{ country }}",{% for count in lookup('vars', country) %} My country = "{{ count }}",{% if loop.last %} My country = "{{ count }}"{% endif %}{% endfor %}},
{% endfor %}

因此,我们需要这个输出

{name: "name1", My country = "region1a", My country = "region1b"},
{name: "name2", My country = "region2a", My country = "region2b"}

您可以为此使用 loop.last,因此在条件测试中用逗号括起您是否在循环最后一项。

您的模板将最终成为:

{% for country in AllСountry %}
{name: "{{ country }}",{% for count in lookup('vars', country) %} My country = "{{ count }}",{% if loop.last %} My country = "{{ count }}"{% endif %}{% endfor %}}{% if not loop.last %},{% endif %}
{% endfor %}

这么说,,我觉得你是在为自己把事情搞复杂,你到底想达到什么目的?您要构建 JSON 吗? (在这种情况下,请注意 My country = "region2a" 无效)。

如果您确实想构建一个数据结构,那么您应该创建代表这些的列表和字典,然后使用简单的现有过滤器,例如 to_json, to_yaml,等等。

否则,这一点仍然适用:如果你想创建一个逗号分隔的字符串列表,在 Ansible 中创建一个字符串列表,然后 join 它们。

例如:

- debug:
    msg: "{{ some_list | join(', ') }}"
  vars:
    some_list:
      - foo
      - bar
      - baz

会给你

foo, bar, baz