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

Ale*_*lex 8 templating ansible ansible-template

准备模板时出现错误。谁能告诉你如何解决?

\n

如有必要,还可以编辑变量。

\n
  vars:\n    All\xd0\xa1ountry:\n         - "name1"\n         - "name2"\n    name1:\n         - "region1a"  \n         - "region1b"   \n    name2:\n         - "region2a"\n         - "region2b"\n
Run Code Online (Sandbox Code Playgroud)\n

代码

\n
{% for country in All\xd0\xa1ountry %}   \n{name: "{{ country }}",{% for count in {{ country }} %}My country = {{ count }}\n{% endfor %}{% endfor %}\n
Run Code Online (Sandbox Code Playgroud)\n

结果是一个错误\nAnsibleError:模板化字符串时出现模板错误:预期标记“:”,得到“}”

\n

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

\n
name: "name1  My country = "region1a" My country = "region1b"   \nname: "name2: My country = "region2a" My country = "region2b"\n
Run Code Online (Sandbox Code Playgroud)\n

β.ε*_*.βε 10

发生这种情况是因为您在 Jinja 的语句分隔符中嵌套了{{表达式分隔符:{%

{% for count in {{ country }} %}
{#              ^--- right there #}
Run Code Online (Sandbox Code Playgroud)

为了实现您想要做的事情,您可以使用查找vars

鉴于剧本:

{% for count in {{ country }} %}
{#              ^--- right there #}
Run Code Online (Sandbox Code Playgroud)

这产生了回顾:

- 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
Run Code Online (Sandbox Code Playgroud)