2017-10-06 179 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