如何在Puppet中基于已定义类型的实例构建文件

时间:2015-04-03 11:55:53

标签: puppet

我希望我的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实例就应该导致它要自动添加到配置文件中。

1 个答案:

答案 0 :(得分:1)

有多种方法可以修改/声明多个定义类型中的文件的一部分:

  1. 使用puppetlabs-stdlib' s file_line。这允许您指定文件应包含特定行。最好不要关心其他文件内容,只想确定一条线是否存在。

  2. 如果您想确保最终文件只包含您指定的片段或片段的顺序,请使用puppetlabs-concat

  3. 如果您需要编辑/添加配置到具有更复杂结构的文件(如xml,apache配置等),请使用augeas type