2014-09-06 32 views
8

我有多個劇本一個劇本:如何並行運行多個ansible戲劇?

--- 
- hosts: druid-realtime-1 
    sudo: true 
    roles: 
    - { role: druid-realtime, du_rt_id: 1 } 

- hosts: druid-realtime-2 
    sudo: true 
    roles: 
    - { role: druid-realtime, du_rt_id: 2 } 

我如何告訴ansible並行運行,而不是一個又一個兩戲劇?

+0

你不能,但請解釋你爲什麼需要? – Mxx 2014-09-07 04:23:11

+2

performance .... – pdeva 2014-09-07 05:38:34

+0

問題可以更好地表達爲 - 「如何處理多個主機並行處理相同的角色?」。目前的問題是更通用的方式,這裏給出的答案沒有解決通用要求。 – 2016-02-05 10:17:32

回答

7

你可以這樣來做

在你Ansible庫存,組服務器和指定主機變量:

[druid-realtime] 
druid-realtime-1 id=1 
druid-realtime-2 id=2 

然後引用變量的劇本:

- hosts: druid-realtime 
    sudo: true 
    roles: 
    - { role: druid-realtime, du_rt_id: {{ id }} } 
+0

那些不匹配的分隔符肯定是偶然的? – PythonNut 2015-05-06 16:40:27

+0

固定,謝謝@PythonNut :) – 2015-05-06 16:47:30

+0

什麼是du_rt_id?這是一個Ansible內置關鍵字嗎? – 2017-08-04 18:13:57

0

一起解決主人(如果你想讓他們做同樣的事情)

- hosts: druid-realtime-1:druid-realtime-2 

    ... 
0

如果你的劇本是孤立的,你可以拆分你的劇本:1 play - > 1 playbook。例如:

  • 德實時-1.yml

- hosts: druid-realtime-1 sudo: true roles: - { role: druid-realtime, du_rt_id: 1 }

  • 德實時-2.yml

- hosts: druid-realtime-2 sudo: true roles: - { role: druid-realtime, du_rt_id: 2 }

  • 保持主劇本site.yml包括其他劇本:

- include: druid-realtime-1.yml - include: druid-realtime-2.yml

通過這種方法,您可以使用每個劇本終端,並繼續使用您的主要劇本。

4

不知道這是可能的創建此帖子的時候,但我相信這是你要找的人:

http://docs.ansible.com/ansible/playbooks_async.html

這可以讓你從封鎖,即停止任務。在進入下一個任務之前等待任務完成。

+1

按要求編輯的答案 – Sam 2017-02-14 20:53:20