Ansible:群角色还是两个角色?

Ansible: swarm role or two roles?

我想遵循 ansible 的最佳实践并使用与功能匹配的角色。

如何组织具有相同公共但不同用途的角色?让我以安装 docker swarm.

为例进行解释

Docker swarm 可以安装为 _master__node_。目前我有 swarm 角色。它有 main.yml master 和一个节点的任务。仅通过变量我确定任务是针对主节点还是针对节点。

我不喜欢这样。我不想使用变量,而是想使用主机列表并说?

这意味着我需要两个不同的角色,对吧?一份用于 swarm_master,一份用于 swarm_node。我将如何在这两个角色之间共享相同的 swarm 安装?

您可以使用:
主持人:

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

剧本:

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

我认为在应用角色时分配角色parameters/variables更容易理解剧本。
其他人很难猜到你在某个地方的角色会检查一些变量。

要在角色内合理地组织任务,您可以使用条件包含。 ./roles/swarm/task/main.yml:

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