【问题标题】:Ansible: swarm role or two roles?Ansible:群角色还是两个角色?
【发布时间】:2016-08-04 16:16:09
【问题描述】:

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

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

Docker swarm 可以安装为_master__node_。目前我拥有swarm 角色。它有main.yml 主节点和节点任务。我只能通过变量来确定任务是针对主节点还是针对节点。

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

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

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

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案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
    

    【讨论】:

    • 我没有看到@knowhy 的建议?
    • 我猜他已经删除了他的答案。我已经用示例更新了我的。
    • 一个问题 - 这里包括 docker-common。那么docker安装不是角色吧?
    • 不,这不是本例中的角色。我只是想说明一下,您可以为角色包含一些常见任务,然后根据参数添加条件包含。
    • 谢谢。顺便说一句,在第一个代码块中分配角色的语法不行吗?看起来应该是- { role: foo_app_instance, dir: '/opt/a', app_port: 5000 }
    猜你喜欢
    • 2017-08-14
    • 2014-12-20
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多