我想遵循ansible的最佳做法并使用与这些功能相匹配的角色。
如何组织具有相同公共但不同用途的角色?让我解释一下安装docker swarm的例子。
Docker swarm可以安装为_master_
或_node_
。目前我有swarm
角色。它有main.yml
,其中包含 主服务器和节点的任务。仅通过变量,我确定任务是针对主节点还是针对节点。
我不喜欢这个。我不想使用变量,而是想使用主机列表并说出来?
这意味着我需要两个不同的角色,对吗?一个用于swarm_master
,一个用于swarm_node
。我将如何在这两个角色之间共享相同的swarm安装?
答案 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