2016-05-14 25 views
2

我創建了一個角色,我在其中定義了所有合理的任務。另外,我在庫存中有主機A和主機B.是否有可能在主機A上執行90%的任務,在主機B上執行10%的任務?我的Ansible控制器是主機C.在不同的主機上執行Ansible任務

+1

對於主機A而言,90%的任務和主機B上的10個任務意味着什麼? – shaps

+0

我在主機A上部署堆棧,我想在主機B上執行配置後腳本。這些腳本應該從可控制器(主機C)或從主機A到主機B,但我不確定如何實現。 – tgcloud

+0

但是,我設法通過提取主機C並使用「delegate_to」來在主機B上執行scp來推送腳本,但無法執行這些腳本。 – tgcloud

回答

3

我認爲這樣做的第一種方法是基於庫存的條件。

在清單中爲創建一個組,併爲B.一組,我會調用這些group_A和group_B

# inventory 
[group_A] 
192.168.1.20 

[group_B] 
192.168.1.30 

然後使用條件上你的任務

- name: run this on A 
    debug: msg="this runs only on A 
    when: "'group_A' in {{group_names}}" 

- name: run this on B 
    debug: msg="this runs only on B 
    when: "'group_B' in {{group_names}}" 

根據有多少任務你有,對每個任務都附加條件可能太多了,所以你可以在包含條件上使用,如下所示:

文件結構:

-tasks 
|- main.yml 
|- A_tasks.yml 
|- B_tasks.yml 

main.yml:

- include: A_tasks.yml 
    when: "'group_A' in {{group_names}}" 
- include: B_tasks.yml 
    when: "'group_B' in {{group_names}}" 

A_tasks.yml:

- name: run on A 
    debug: msg="this only runs on A" 

B_tasks.yml:

- name: run on B 
    debug: msg="this only runs on B" 
+0

這可能在舊版本的Ansible中正常工作,但至少從版本2.4.2.0開始,條件應該是'when:'group_names「'中的'group_A'。 –

6

如果你正在分裂的所有任務在一個兩個不同主機之間的角色,那麼這兩個主機都沒有這個角色,是嗎?我想說,當你真的有兩個角色時,將所有這些任務集中到一個角色中,這是對角色系統的濫用。

如果您有多臺主機As,會發生什麼情況?怎麼樣多個主機Bs?

在我看來,你實際上並不想在這裏使用角色 - 你只想使用普通的ol劇本。

- hosts: A 
    tasks: 
    [...] 

- hosts: B 
    tasks: 
    [...] 

劇本是按照特定的順序定義了一系列的行動,而你的「做B本的東西做這個東西之後只A」是。

+1

我傾向於同意,但理論上您可以設計一個用於設置Hadoop集羣的角色,並且您需要在主服務器和從服務器上運行不同的任務。這超出了配置管理到基礎架構部署,但它在Ansible中得到了支持。 – smiller171

相關問題