我的基础架构中有 2 个不同的数据库实例,每个实例用于保存不同的数据,每个实例在不同的机器上运行,并且每个实例都需要不同级别的可用性和安全性,因此虽然它们都使用 Postgresql 作为数据库,但由于它们在我的基础架构中扮演不同的“角色”,我已在 ansible 代码中编写了不同的角色,以便设置它们并准备好处理请求。我们称它们为数据库A
和B
。
因为A
我需要一个由管理的副本,它在单独的机器上运行,并且我的代码中还有另一个角色,它使用特定于的配置repmgr
设置了的副本。由于和的副本是A
A
A
A
不是可互换,它们不属于库存文件中的同一组,并且我有一个A
组和一个A_replica
组,它们明显不同。
现在,我想添加 的副本B
,使用repmgr
与 的副本相同的代码A
,但我看不到重用我为 编写的代码的方法A
,因为它们的不同之处在于:
hosts
剧本中的任务是按照这个方式运行的,- 指令中用于
template
生成配置文件的一些变量。默认情况下,我在 中定义这些变量group_vars
,但我不知道如何在剧本中定义它们,特别是包含其他(低级)剧本的剧本
有解决方案吗?还是我应该直接复制粘贴代码B
?
非常感谢。
答案1
答案2
我的代码中的另一个角色是设置
A
具有特定配置的副本A
为了最大程度地重复使用,提取全部配置可以分为变量和模板。主/次布尔值、主机名和端口、用户和机密。概括可能意味着更聪明,例如根据是否需要副本在模板中使用 if 语句。抽象的成功意味着您(或其他人,如果您在 Galaxy 上发布!)可以在其他项目中重复使用该角色。
默认情况下,我在 group_vars 中定义这些,但我不知道如何在剧本中定义它们,特别是包含其他(低级)剧本的剧本
有很多地方可以放置变量:变量优先级:我应该把变量放在哪里?
您始终创建的管理员用户可以是默认角色,“我是副本”布尔值可能位于组变量中,特定数据库的复制名称可能位于主机变量中。这样,您可以运行游戏,hosts: A_replica,B_replica
但每个游戏都使用一些独特的配置。
制作“子类”角色的一个有效方法是使用角色依赖关系. 创建一个功能齐全但抽象的角色db
. 为数据库的每个实例创建角色db-a
,db-b
每个角色在其元中都具有依赖关系db
。 A 和 B 角色只需提供不同的变量,可能还有一两个任务。