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

时间:2016-08-03 14:41:30

标签: ansible ansible-playbook

我想遵循ansible的最佳做法并使用与这些功能相匹配的角色。

如何组织具有相同公共但不同用途的角色?让我解释一下安装docker swarm的例子。

Docker swarm可以安装为_master__node_。目前我有swarm角色。它有main.yml,其中包含 主服务器和节点的任务。仅通过变量,我确定任务是针对主节点还是针对节点。

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

  • serverA是swarm_master
  • serverB,serverC ...是swarm_node

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

1 个答案:

答案 0 :(得分: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