我有一种情况,我想循环一个列表(with_items)并执行命令。但是,除非第一个项目已在所有主机上完成,否则下一个项目无法启动。我将循环的项目数量将是巨大的。但是,主机不应该对正在使用的项目有任何偏差。除非项目1已在整个主机池中完成,否则任何主机都不应启动item2。
要创建概念证明,我希望实现以下目标
- name: proof of concept
command: bash -c /home/user/my_test_script.sh
with_items:
- item_1
- item_2
....
- item_n
my_test_script.sh在每个主机上都有不同的睡眠(x),模拟某些主机在执行作业时可能会更慢。
我已经查看过,wait_for,wait_until等等。但是还没有找到执行并行任务的解决方案(with_items),它运行(对于列表中的每个项目)'同步'(时间不明确) rsync)用于许多给定项目。
任何帮助都将不胜感激。
答案 0 :(得分:0)
相关:Ansible: How to iterate over an role with an array?。
如果您使用Ansible 2.3.0或更高版本,请查看include_role。您可以编写一个使用变量参数调用脚本的角色。然后你的剧本可以循环播放这个角色。
作用:
- name: proof of concept
command: bash -c /home/user/my_test_script.sh {{ script_param }}
剧本:
- include_role:
name: test_script
with_items:
- item1
- item2
- item3
vars:
script_param: "{{ item }}"