我的设置包含“服务器对”,这意味着我的服务的每个“实例”都由(通常)不同主机上的两台服务器(如数据库和Web)组成。也就是说,我没有一个数据库服务器可以与许多Web服务器进行通信 - 相反,每个Web服务器都会与自己的数据库服务器通信。我想管理多个这样的对,但我不知道使用Ansible对这些对进行建模的最佳方法。使用Ansible管理服务器对
Ansible中的主要组织工具似乎是团体和角色。但是,这些只能将同一种类的主机组合在一起。例如,我可以使用它在我的数据库和Web服务器上设置必要的软件。但是,我不认为我可以使用组或角色来告诉每个Web服务器只使用一个数据库服务器。
使用Ansible组对一对服务器进行建模也没有意义,因为我无法区分这些组中的两个不同角色。
虽然我的设置由服务器对我也很有兴趣建模n
至 - m
主机关系的多个实例(比如n
数据库服务器和m
Web服务器)的总称。
这有效,但相当麻烦:首先,我需要两个方向的信息(例如允许从数据库服务器上的Web服务器进行远程访问),所以我需要为每个数据库添加'webserver = ...'服务器,这是冗余信息,使维护变得更加困难。其次,在Web和数据库服务器(例如数据库用户名)之间共享变量没有很好的方法,因为变量是全局,每个组或每次播放定义的。 –
我想你可以通过使用'hostvars'来找到合适的网络服务器来避免重复信息,而不必在清单中明确记录这些信息(例如,搜索具有'dbserver = <此数据库服务器>的网络服务器)。您可以绝对地共享数据库用户名等信息,方法是将其声明为通用角色,并将其包含在您需要该信息的任何播放中。 – larsks
感谢您的更新。我结束了使用不同的方法(请参阅我的答案),但我很感激您的输入! –