为了避免循环变量被引用的问题,可以使用“loop_control”来控制循环过程中变量的命名空间。其中,“loop_control”必须定义在第一层循环内部。具体实现步骤如下:
-
将要引用循环变量的内层循环放在外层循环之外。
-
添加“loop_control”到外层循环,使用“loop_var”指定外层循环的变量名,在内层循环中使用“{{ outer_loop_var }}”来引用外层循环的变量。
示例代码:
- name: 在另一个循环中引用循环变量
hosts: localhost
vars:
outer_loop:
- name: group1
items:
- user1
- user2
- name: group2
items:
- user3
- user4
tasks:
- name: 控制循环变量引用
debug:
msg: "Outer loop: {{ outer_item.name }}, Inner loop: {{ item }}"
loop: "{{ outer_loop }}"
loop_control:
loop_var: outer_item
- name: 修改变量名称
set_fact:
outer_item_name: "{{ outer_item.name }}"
loop: "{{ outer_loop }}"
- name: 内层循环引用外层循环的变量
debug:
msg: "Outer loop variable referenced in inner loop: {{ outer_item_name }}"
loop: "{{ outer_item.items }}"
loop_control:
loop_var: item