将 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 模板标记。如果您已经在 Jinja 模板表达式中({{...}}
或 {%...%}
),您可以简单地通过名称引用变量(myvar
);你不需要 {{ myvar }}
.
您的模板表达式应该类似于:
{% for row_af in af_name | default(['ipv4', 'ipv6']) %}
Address-family: {{ row_af }}
{% endfor %}
假设 af_name
未定义,以上将产生:
Address-family: ipv4
Address-family: ipv6
如何使用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 模板标记。如果您已经在 Jinja 模板表达式中({{...}}
或 {%...%}
),您可以简单地通过名称引用变量(myvar
);你不需要 {{ myvar }}
.
您的模板表达式应该类似于:
{% for row_af in af_name | default(['ipv4', 'ipv6']) %}
Address-family: {{ row_af }}
{% endfor %}
假设 af_name
未定义,以上将产生:
Address-family: ipv4
Address-family: ipv6