我正在编写一个设置系统的Ansible手册,在某些配置中,某些系统可能由另一个组织提供。一个非常简单的例子:
清单:
剧本:
设置两台服务器,并使用数据库,端口和数据库服务器的用户/传递将application.properties
文件添加到应用服务器。
到目前为止工作,但随后出现了一个要求,即在某些部署中,数据库服务器由另一个组织提供,因此我无法将其包含在库存中,因为设置步骤失败,但我仍想生成应用服务器的属性文件(包含我从其他人那里获得的数据库服务器信息)。
对于这两种情况(我自己的数据库服务器和提供的数据库服务器),最不痛苦的解决方案是什么,考虑到有6种这样的服务器类型,而不仅仅是2(所以不仅仅是2种不同的情况,还有为我提供服务器的许多排列,以及我的服务器。
编辑:
更具体地说,我遇到的问题是,如果我在系统不是我的时候使用vars,而当我的系统不是我的,那么我在编写application.properties.j2
模板时遇到问题,因为事实和变量的引用方式不同。如何在模板中使用var,但如果var未定义,则使用一个事实?
答案 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
文件。