将 jinja2 变量默认值设置为列表

set jinja2 variable default value as list

如何使用jinja2默认过滤器设置变量为列表类型?

我试图将 jinja2 变量的默认值设置为列表类型。然后从中执行for循环。

{% for row_af in {{ af_name | default(['ipv4', 'ipv6']) }} %}
Address-family:     {{ row_af }}
{% endfor %}

但是我从中得到了以下错误。

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: {% endfor %}
fatal: [pl1]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: expected token ':', got '}'. String: \n{% for row_af in {{ af_name | default(['ipv4', 'ipv6']) }} %}\nAddress-family:     {{ row_af }}\n{% endfor %}\n\n"}

如果我只为它设置一个“字符串”类型的值,默认过滤器就可以正常工作。想知道如何将其设置为“列表”或“字典”。

您永远不会嵌套 Jinja 模板标记。如果您已经在 J​​inja 模板表达式中({{...}}{%...%}),您可以简单地通过名称引用变量(myvar);你不需要 {{ myvar }}.

您的模板表达式应该类似于:

{% for row_af in af_name | default(['ipv4', 'ipv6']) %}
Address-family:     {{ row_af }}
{% endfor %}

假设 af_name 未定义,以上将产生:

Address-family:     ipv4
Address-family:     ipv6