jinja¶
此规则可以报告与 jinja2 字符串模板相关的问题。当前版本可以报告
jinja[spacing]
当变量和运算符(包括过滤器)之间没有空格时,例如{{ var_name | filter }}
。这提高了可读性,并降低了引入错字的可能性。jinja[invalid]
当 jinja2 模板无效时,例如{{ {{ '1' }} }}
,即使它通过了 Ansible 语法检查,如果您尝试将其与 Ansible 一起使用,也会导致运行时错误。
由于 jinja2 语法与 Python 语法非常相似,我们旨在遵循 black 格式化规则。如果您想知道 black 如何重新格式化一个小片段,请随时访问 在线 black 格式化工具 网站。请记住不要包含整个 jinja2 模板,因此不要使用 {{ 1+2==3 }}
,而只粘贴 1+2==3
。
在 Ansible 中,changed_when
、failed_when
、until
、when
被认为使用隐式 jinja2 模板,这意味着它们不需要 {{ }}
。我们的规则将建议删除这些字段的大括号。
问题代码¶
---
- name: Some task
vars:
foo: "{{some|dict2items}}" # <-- jinja[spacing]
bar: "{{ & }}" # <-- jinja[invalid]
when: "{{ foo | bool }}" # <-- jinja[spacing] - 'when' has implicit templating
正确代码¶
当前限制¶
在其当前形式下,此规则存在以下限制:
- 包含换行符的 Jinja2 块将不会被重新格式化,因为我们认为用户故意要以特定方式格式化它们。
- 使用波浪号作为二元运算符的 Jinja2 块将被忽略,因为 black 不支持波浪号作为二元运算符。例如:
{{ a ~ b }}
。 - 使用带数字的点表示法的 Jinja2 块将被忽略,因为 Python 和 black 不允许这样做。例如:
{{ foo.0.bar }}
注意
可以使用 --fix
选项自动修复此规则。