跳至内容

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_whenfailed_whenuntilwhen 被认为使用隐式 jinja2 模板,这意味着它们不需要 {{ }}。我们的规则将建议删除这些字段的大括号。

问题代码

---
- name: Some task
  vars:
    foo: "{{some|dict2items}}" # <-- jinja[spacing]
    bar: "{{ & }}" # <-- jinja[invalid]
  when: "{{ foo | bool }}" # <-- jinja[spacing] - 'when' has implicit templating

正确代码

---
- name: Some task
  vars:
    foo: "{{ some | dict2items }}"
    bar: "{{ '&' }}"
  when: foo | bool

当前限制

在其当前形式下,此规则存在以下限制:

  • 包含换行符的 Jinja2 块将不会被重新格式化,因为我们认为用户故意要以特定方式格式化它们。
  • 使用波浪号作为二元运算符的 Jinja2 块将被忽略,因为 black 不支持波浪号作为二元运算符。例如:{{ a ~ b }}
  • 使用带数字的点表示法的 Jinja2 块将被忽略,因为 Python 和 black 不允许这样做。例如:{{ foo.0.bar }}

注意

可以使用 --fix 选项自动修复此规则。