我希望我的Puppet类创建一个文件资源,其内容基于特定定义类型的所有实例。我查看this question的想法是迭代实例来构建文件,但显然这对于目前的一个答案来说是一个“坏主意”。
一些背景知识:我正在Puppet中构建一个monitor_service
类来部署自定义监视应用程序。应用程序读取一个配置文件,告诉它要监视的内容,每行一个项目,沿着
ITEM: /var/things/thing-one (123)
ITEM: /var/things/thing-two (456)
我还在编写一个定义类型,用于部署受监视项目的实例:
define my_thing::monitored_thing ( $port ) {
file { "/var/things/$name":
...
}
}
在给定节点上,我设置了几个monitored_thing
,如
my_thing::monitored_thing { "thing-one":
port => 123
}
my_thing::monitored_thing { "thing-two":
port => 456
}
用于构建监控服务配置文件的“正确”Puppet习惯用法是什么?我希望以这种方式工作,以便monitor_service
类不必被告知它正在观察哪个monitored_thing
个实例 - 只需创建一个monitored_thing
实例就应该导致它要自动添加到配置文件中。
答案 0 :(得分:1)
有多种方法可以修改/声明多个定义类型中的文件的一部分:
使用puppetlabs-stdlib
' s file_line
。这允许您指定文件应包含特定行。最好不要关心其他文件内容,只想确定一条线是否存在。
如果您想确保最终文件只包含您指定的片段或片段的顺序,请使用puppetlabs-concat
。
如果您需要编辑/添加配置到具有更复杂结构的文件(如xml,apache配置等),请使用augeas
type。