使用导出的资源构建数组/字符串

时间:2016-03-29 01:13:59

标签: puppet

我正在编写清单以在我们的环境中配置NXLog。 我们的想法是打电话给'模块'类似于客户端上的collectd,例如: nxlog::plugins::syslog和/或nxlog::plugins::nginx等等

我陷入困境的步骤是在配置文件的末尾构建路由,最后一行必须包含syslog, nginx作为字符串值。

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

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

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

3 个答案:

答案 0 :(得分:0)

我不知道你读了什么,但<%= input.flatten.join(',') %>工作正常。

foo.pp:

$input = ['a', 'b', 'c']
$output = inline_template('<%= @input.flatten.join(",") %>')
notice($output)

puppet apply foo.pp:

Notice: Scope(Class[main]): a,b,c
Notice: Compiled catalog for centos-72-x64.home in environment production in 0.01 seconds
Notice: Finished catalog run in 0.01 seconds

答案 1 :(得分:0)

  

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

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

相反,您可以考虑生成所需的配置作为收集和应用导出资源的效果,这可能需要使用与您现在不同的资源类型。例如,您可以通过Concat模块管理目标文件,并让导出的资源成为Concat::Fragment的实例,其中包含所需目标内容的实际部分。如果目标配置可以合理地分配到多个文件中,这样会更容易一些,这样您就可以使用File s来表示导出资源的类型,但这种方式可以适用于您。< / p>

答案 2 :(得分:0)

如果有其他人碰到这个 - 这就是我修复它的方法,请注意,必须为此运行PuppetDB ...

df.groupby(id)

这将创建一个逗号分隔的数组字符串。 我必须包含排序,否则Puppet会根据客人的最后一次登记返回字符串,排序会消除影响更改的可能性。