2017-10-06 170 views
0

我有一种情况,我想循环一个列表(with_items)并执行命令。但是,除非第一项在所有主机上完成,否则下一项无法启动。我将循环的项目数量将非常庞大。但是,主机中不应该有任何与正在使用的项目有关的偏差。除非项目1在整个主机池中完成,否则主机不应该启动项目2。Ansible顺序with_items通过主机

要创建概念证明我希望能达到以下

- 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

相关: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 }}" 
+0

这也从一个角色中可能(这是我目前的状况) – Benjamin

+0

当然,只是把底部的任务在你的角色ISN” t'test_script'。 – kfreezy