跳到内容

no-jinja-when

此规则检查条件语句中是否存在花括号 {{ }} 中的 Jinja 表达式。Ansible 将使用 whenfailed_whenchanged_when 子句的条件语句视为 Jinja 表达式进行处理。

Ansible 的规则是始终使用 {{ }},但 when 键除外。在条件语句中使用 {{ }} 会创建一个嵌套表达式,这是一个 Ansible 反模式,不会产生预期的结果。

有问题的代码

---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Shut down Debian systems
      ansible.builtin.command: /sbin/shutdown -t now
      when: "{{ ansible_facts['os_family'] == 'Debian' }}" # <- Nests a Jinja expression in a conditional statement.

正确的代码

---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Shut down Debian systems
      ansible.builtin.command: /sbin/shutdown -t now
      when: ansible_facts['os_family'] == "Debian" # <- Uses facts in a conditional statement.

注意

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