如何让Ansible基于自定义列表逐项循环执行任务组?
让Ansible按列表项依次执行所有任务的实现方法
你当前的Playbook中,两个任务各自独立遍历列表,导致执行顺序是先完成所有dummy task 1的循环,再完成所有dummy task 2的循环,不符合“对每个列表项依次执行所有任务”的需求。
要实现你期望的执行顺序,可以通过将任务放入block并给block添加循环的方式来实现,具体修改后的Playbook如下:
--- - hosts: my_host gather_facts: false vars: mylist: - abc - def - xyz tasks: - name: 按列表项批量执行任务组 block: - name: dummy task 1 shell: "echo 'task 1 {{ item }}'" - name: dummy task 2 shell: "echo 'task 2 {{ item }}'" loop: "{{ mylist }}"
关键说明:
block用于将多个任务打包成一个任务组,当给block添加loop时,Ansible会对列表中的每一项,依次执行block内的所有任务,正好匹配你想要的task1→task2按项循环的逻辑。- 修正了原Playbook中的变量名错误:原定义的变量是
mylist,但任务中误用了my_list,修改后保持变量名一致,避免出现未定义错误。
执行上述Playbook后,输出结果将与你期望的一致:
task 1 abc task 2 abc task 1 def task 2 def task 1 xyz task 2 xyz
内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

