2016-08-03 97 views
1

我希望遵循最佳實踐,以便使用符合特徵的角色並使用角色。Ansible:swarm角色還是兩個角色?

如何組織具有相同公用但用途不同的角色?讓我來解釋一下安裝docker swarm的例子。

碼頭羣可以安裝爲_master__node_。目前我有swarm角色。它有main.yml任務主節點和一個節點。只有通過變量,我才能確定任務是針對主控還是針對節點。

我不喜歡這樣。而不是有變量,我想使用主機列表並說?

  • serverA的是swarm_master
  • 服務器B,服務器...是swarm_node

這意味着我需要兩個不同的角色,對不對?一個用於swarm_master,另一個用於swarm_node。我如何在這兩個角色之間共享相同的安裝羣?

回答

1

您可以使用:
主持人:

[swarm-master] 
serverA 
[swarm-nodes] 
serverB 
serverC 

劇本:

--- 
- hosts: swarm-master, swarm-nodes 
    roles: 
    - role: swarm 
     is_master: "{{ 'swarm-master' in group_names }}" 

我認爲這是比較容易理解的劇本,當你分配角色參數/應用角色時變量。
很難猜測其他人你的角色是否在某個地方檢查了一些變量。

要在邏輯上構建角色內部的任務,您可以使用條件包含。 ./roles/swarm/task/main.yml:

- include: docker_common.yml 
- include: swarm_master.yml 
    when: is_master 
- include: swarm_node.yml 
    when: not is_master 
+0

我沒有看到@knowhy建議? – igr

+0

我想他已經刪除了他的答案。我用例子更新了我的內容。 –

+0

一個問題 - 在這裏你包括碼頭共同。然後碼頭安裝不是一個角色,對吧? – igr