如何使用Ansible将Web应用程序部署到多个Web服务器之一?

时间:2017-07-12 22:26:41

标签: ansible

我怀疑我是以错误的方式解决这个问题,但我想使用Ansible来安装一组Web服务器,然后安装一个Web应用程序。我很难弄清楚角色应该是什么样子,特别是应用角色应该依赖的东西。

我可以为每个Web服务器设置角色,但似乎我必须为每个app-webserver对设置一个角色。似乎没有办法让应用程序依赖于任何Web服务器,或者根据我在meta/main.yml中使用它的尝试使用变量来指定依赖角色。

或者,我可以拥有一个通用的Web服务器角色,该角色本身会安装一个受支持的Web服务器,但我不确定它应该如何工作,并且我已经启用了查找要引用的示例。

也许我正在以错误的方式思考这个问题。重复是唯一的方法吗? (为了简洁,我稍微简化了问题,实际上我也有多个可以使用的数据库,因此组合将是m*n app-webserver-db triplets。)

2 个答案:

答案 0 :(得分:0)

我不确定完全理解你的问题。但似乎您可以通过正确组织库存来解决这个问题。

[webservers]
srv1
srv2
srv3
srv4

[application1]
srv1

[application2]
srv2

[application3]
srv3

[application4]
srv4

您可以一次配置所有Web服务器,然后在适当的Web服务器上安装每个应用程序。

---
- hosts: webservers
  roles:
    - webserver_role

- hosts: application1
  roles:
    - application1_role

- hosts: application2
  roles:
    - application2_role

- hosts: application3
  roles:
    - application3_role

- hosts: application4
  roles:
    - application4_role

webserver_role会安装和配置常见内容,而application1_roleapplication2_roleapplication3_roleapplication4_role会安装和配置特定于应用程序的内容。

答案 1 :(得分:0)

您可以在广告资源中使用群组。为每个应用程序服务器(webserversgeronimo等创建主要组jetty和子组:

[webservers:children]
geronimo
glassfish
jetty
wildfly

[geronimo]
srv1

[glassfish]
srv2

[jetty]
srv3

[wildfly]
srv4

然后根据包含的子组安装适当的应用程序服务器。最后在每个Web服务器上安装应用程序:

---
- hosts: geronimo
  roles:
    - geronimo_role

- hosts: glassfish
  roles:
    - glassfish_role

- hosts: jetty
  roles:
    - jetty_role

- hosts: wildfly
  roles:
    - wildfly_role

- hosts: webservers
  roles:
    - application_role