Puppet 最佳实践:在配置文件之间共享变量

Puppet 最佳实践:在配置文件之间共享变量

我正在对我当前的 puppet 项目使用角色和配置文件方法。

Puppet 最佳实践告诉我:

  • 在主类参数列表中公开所有必要的配置文件参数。
  • 执行层次结构查找来填充这些参数(在模块层次结构中具有默认值)
  • 不要访问其他模块/配置文件范围内的变量
  • 保持 DRY(不要重复自己)

现在我面临以下问题(使用puppet 5.5):

我有一个基本配置文件,它包含在所有节点中(配置 apt、设置时区、时间服务器等)。然后我有几个特定于应用程序的配置文件(例如,一个用于设置 IIS,一个用于设置 haproxy 等)。现在我想将日志服务器添加到我的应用程序配置文件中。当然,我希望在 hiera 中只指定一次日志服务器(DRY),但在所有配置文件中使用它。

我的第一个方法是将日志服务器参数添加到我的基本配置文件的参数列表中,然后使用范围变量访问从应用程序配置文件访问它。但这与最佳实践相矛盾,因为它在模块之间添加了隐藏的接口/依赖关系。

我想到的另一种方法是引入一个常见的 hiera 变量,我可以使用显式查找来查找该变量。例如:

class profile::haproxy(
   Stdlib::Host $log_server = lookup('common::log_server'),
) {}

我也觉得这有点可疑。

所以我的问题是:如何在不违反最佳实践的情况下在模块/配置文件之间共享变量?

答案1

我将在层次结构本身中使用插值函数:

common::log_server: foo
profile::haproxy::log_server: "%{lookup('common::log_server')}"
profile::iis::log_server: "%{lookup('common::log_server')}"

这使得配置文件保持独立并且维护 DRY。

这是此技术的傀儡文档。

相关内容