使用导出的资源构建 array/string

Building up an array/string using exported resources

我正在编写清单以在我们的环境中配置 NXLog。 这个想法是在客户端调用类似于 collectd 的 'modules',例如: nxlog::plugins::syslog and/or nxlog::plugins::nginx 等等等等

我遇到的问题是在配置文件末尾建立路由,最后一行必须包含 syslog, nginx 作为字符串值。

最初我想到使用诸如$input += [$input] 之类的东西,并在每个清单中设置$input 的值。然后用逗号连接数组以创建一个字符串,但进一步阅读论坛强烈暗示这不起作用。

我想过使用内联模板 <%= input.flatten.join(',') %> ,但似乎其他人已经在较旧的 post 中尝试过但没有成功。

有没有办法从导出资源中的类似变量动态构建字符串值?

Is there a way to dynamically build up a string value from similar variables in exported resources?

我不知道有任何这样的方式,总的来说,从声明的资源中提取 属性 值是一种糟糕的形式。在 Puppet 4 之前,这根本不可能,无论涉及的资源是具体的、虚拟的还是导出的。

相反,您可以考虑生成您想要的配置,作为收集和应用 导出资源的效果,这可能需要使用与现在不同的资源类型。例如,您可以通过 Concat 模块管理目标文件,并让导出的资源成为 Concat::Fragment 的实例,其中包含所需目标内容的实际片段。如果目标配置可以合理地拆分为多个文件,这会更容易一些,这样您就可以使用 Files 作为导出资源的类型,但它可以为您工作。

如果其他人 运行 对此感兴趣 - 这是我修复它的方法,请注意,必须 运行 PuppetDB 为此...

  $q_all = (puppetdb_query("
    inventory[certname] {
      facts.app = 'graylog' and environment = '${::environment}'
    }"))

  $members_all = join(sort($q_all.map |$index, $c_name| { "${$c_name['certname']}:9300" }),',')

这将创建数组的逗号分隔字符串。 我必须包括排序 else Puppet returns 基于客人上次入住的字符串,排序消除了影响更改的可能性。