Ansible:将非托管系统包含在配置中

时间:2016-03-18 15:51:52

标签: ansible ansible-playbook ansible-2.x

我正在编写一个设置系统的Ansible手册,在某些配置中,某些系统可能由另一个组织提供。一个非常简单的例子:

清单:

  • 应用服务器
  • 数据库服务器

剧本: 设置两台服务器,并使用数据库,端口和数据库服务器的用户/传递将application.properties文件添加到应用服务器。

到目前为止工作,但随后出现了一个要求,即在某些部署中,数据库服务器由另一个组织提供,因此我无法将其包含在库存中,因为设置步骤失败,但我仍想生成应用服务器的属性文件(包含我从其他人那里获得的数据库服务器信息)。

对于这两种情况(我自己的数据库服务器和提供的数据库服务器),最不痛苦的解决方案是什么,考虑到有6种这样的服务器类型,而不仅仅是2(所以不仅仅是2种不同的情况,还有为我提供服务器的许多排列,以及我的服务器。

编辑: 更具体地说,我遇到的问题是,如果我在系统不是我的时候使用vars,而当我的系统不是我的,那么我在编写application.properties.j2模板时遇到问题,因为事实和变量的引用方式不同。如何在模板中使用var,但如果var未定义,则使用一个事实?

1 个答案:

答案 0 :(得分:0)

我假设每个部署都有一个库存文件。因此,库存文件可能如下所示:

[app]
an-app.server

[db]
a-db.server

[deploymentA:children]
app
db

[deploymentA:vars]
db_ip=foo
dp_port=foo
db_user=foo
db_pass=foo

deploymentA:vars您可能会将其存储为group_vars/deploymentA,但为了简单起见,我只是将其存入广告资源。

现在的剧本:

- hosts: db
  roles:
    - setup-db-server

- hosts: app
  roles:
    - setup-app-server

在数据库服务器不由您自己管理的部署中,您根本不会在清单中定义数据库服务器。组db将为空。在这种情况下,第一个游戏将简单地打印"没有匹配的主机"或类似的事情,继续下一场比赛。

在您管理数据库服务器的部署中,将运行角色setup-db-server,您可以使用deploymentA:vars进行配置。

在您的应用游戏中,无论主机是否属于您,您都拥有deploymentA:vars并且可以推出application.properties文件。