配置具有从属角色的Ansible角色

Chr*_*ian 11 ansible ansible-role

最好用一个例子来描述这个问题:

有两个角色:

  • mailserver:基本邮件服务器配置
  • mailinglist:邮件列表应用程序

邮件列表软件需要邮件服务器将传入的邮件传输到邮件列表软件的"虚拟收件箱".这需要一些邮件服务器的配置.但邮件服务器不知道邮件列表角色,也不了解具有类似配置要求的其他角色.

我想做的是:

  • mailinglist(和其他类似的角色)将传输配置存储在变量中transport_config.这可能是一个"运输地图",如$ email => $ spool.
  • mailinglist取决于mailserver角色.
  • mailserver使用变量配置它的"传输" transport_config.

有没有办法在Ansible中做这样的事情?或者这个问题的另一个解决方案 这是不是可以使用类似角色的变量{role: mailserver, transport_config: ...},因为依赖于邮件服务器可能有不止一个角色.

我能想到的是一种解决方法:mailserver读取/解析定义传输映射的配置目录.mailinglist和其他角色将文件添加到此目录.这里的问题是,这通常需要"配置构建器"来读取这样的配置目录并生成主配置文件.

Ben*_*ley 20

您可以使用角色依赖关系来完成此任务.

mailinglist角色下roles/mailinglist/meta/main.yml,添加如下内容:

---
dependencies:
  - { role: mailserver, transport_config: ... }
Run Code Online (Sandbox Code Playgroud)

对任何其他类似角色也这样做.

  • 但这将多次运行邮件服务器角色,每次都会覆盖最后的邮件服务器配置。 (2认同)

enc*_*ded 4

为了回应您关于“配置生成器”的评论,请参阅assemble ansible 模块。棘手的部分可能是在运行汇编模块之前将所有文件放入一处。

否则,tima 对 host_ 和 group_vars 的建议是有意义的。

  • 在我的用例中,逗号分隔值可以分割多行,所以这实际上是有效的。也许它适用于大多数用例。 (2认同)