AnsibleError: template error while templating string: expected token ':', got '}'

AnsibleError: template error while templating string: expected token ':', got '}'

准备模板时出错。谁能告诉你怎么解决?

如果需要,也可以编辑变量。

  vars:
    AllСountry:
         - "name1"
         - "name2"
    name1:
         - "region1a"  
         - "region1b"   
    name2:
         - "region2a"
         - "region2b"

代码

{% for country in AllСountry %}   
{name: "{{ country }}",{% for count in {{ country }} %}My country = {{ count }}
{% endfor %}{% endfor %}

结果出错 AnsibleError:模板化字符串时出现模板错误:预期标记':',得到'}'

是的,最后我希望得到整个列表的输出

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

发生这种情况是因为您在 Jinja 此处的语句定界符 {% 中嵌套了表达式定界符 {{

{% for count in {{ country }} %}
{#              ^--- right there #}

为了实现您的目标,您可以使用 vars 查找。

鉴于剧本:

- hosts: all
  gather_facts: no
      
  tasks:
    - debug: 
        msg: >
          {% for country in AllCountry %}   
          {name: "{{ country }}",{% for count in lookup('vars', country) %}My country = {{ count }}
          {% endfor %}{% endfor %}
      vars:
        AllCountry:
          - name1
          - name2
        name1:
          - region1a
          - region1b 
        name2:
          - region2a
          - region2b

这产生了回顾:

PLAY [all] *******************************************************************************************************

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "msg": "    {name: \"name1\",My country = region1a My country = region1b     {name: \"name2\",My country = region2a My country = region2b \n"
}

PLAY RECAP *******************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0