- 确保 playbook 中的循环语句只针对需要循环的变量,而不是针对整个任务。例如:
- name: Register users
user:
name: "{{ item }}"
state: present
loop: "{{ users }}"
- 如果在 playbook 中必须使用双重迭代,请使用 with_nested 或 with_product 语句,以避免重复执行任务。例如:
- name: Execute command on all hosts
command: "{{ item.0 }} {{ item.1 }}"
with_nested:
- ["ls", "pwd"]
- "{{ groups['all'] }}"
其中,with_nested 会将两个列表生成所有组合,避免了重复执行任务的问题。
- 可以考虑将任务拆分成多个角色,然后使用 include_role 和 loop 导入这些角色。例如:
- name: Configure web servers
include_role:
name: "{{ item }}"
loop:
- web
loop_control:
loop_var: role
这样可以分别执行每个角色,避免了任务重复执行的问题。