跳至内容

loop-var-prefix

此规则通过在循环中强制使用单个变量名来避免与嵌套循环任务冲突。Ansible 默认使用item作为循环变量。您可以使用loop_var来重命名它。可以选择要求变量名前缀。前缀可以通过<loop_var_prefix>设置进行配置。

此规则会产生以下消息

  • loop-var-prefix[missing] - 通过添加loop_var: <variable_name>...替换任何不安全的隐式item循环变量。
  • loop-var-prefix[wrong] - 确保循环变量以<loop_var_prefix>开头。

此规则源自Ansible最佳实践指南的命名参数部分

设置

您可以通过覆盖其用于检查循环变量命名的默认正则表达式来更改此规则的行为。请记住,在适用情况下,{role}部分将替换为推断的角色名称。

# .ansible-lint
loop_var_prefix: "^(__|{role}_)"

这是一个可选规则。您必须在 Ansible-lint 配置中启用它,如下所示:

enable_list:
  - loop-var-prefix

问题代码

---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Does not set a variable name for loop variables.
      ansible.builtin.debug:
        var: item # <- When in a nested loop, "item" is ambiguous
      loop:
        - foo
        - bar
    - name: Sets a variable name that doesn't start with <loop_var_prefix>.
      ansible.builtin.debug:
        var: zz_item
      loop:
        - foo
        - bar
      loop_control:
        loop_var: zz_item # <- zz is not the role name so the prefix is wrong

正确代码

---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Sets a unique variable_name with role as prefix for loop variables.
      ansible.builtin.debug:
        var: myrole_item
      loop:
        - foo
        - bar
      loop_control:
        loop_var: myrole_item # <- Unique variable name with role as prefix