如何基于 Puppet 中定义类型的实例构建文件
How to build a file based on defined-type instances in Puppet
我希望我的 Puppet class 创建一个文件资源,其内容基于特定定义类型的所有实例。我查看 this question 的想法是遍历实例以构建文件,但显然它是 "Bad Idea" 每个当前存在的答案。
一些背景:我正在 Puppet 中构建 monitor_service
class 以部署自定义监控应用程序。应用程序读取一个配置文件,告诉它要监视什么,每行一个项目,按照
行
ITEM: /var/things/thing-one (123)
ITEM: /var/things/thing-two (456)
我也在写一个部署监控项实例的定义类型:
define my_thing::monitored_thing ( $port ) {
file { "/var/things/$name":
...
}
}
在给定的节点上,我设置了几个 monitored_thing
s,例如
my_thing::monitored_thing { "thing-one":
port => 123
}
my_thing::monitored_thing { "thing-two":
port => 456
}
构建监控服务配置文件的 "right" Puppet 习惯用法是什么?我更希望它以这样一种方式工作,即 monitor_service
class 不必被告知它正在监视哪些 monitored_thing
个实例——只需创建一个 monitored_thing
实例应使其自动添加到配置文件中。
有几种方法可以 modify/declare 多个定义类型中的文件的一部分:
使用 puppetlabs-stdlib
的 file_line
。这使您可以指定文件应包含特定行。当您不关心其他文件内容而只想确保某行存在或不存在时最好。
如果您想确保最终文件仅包含您指定的片段或片段的顺序很重要,请使用puppetlabs-concat
。
如果你需要edit/add配置到结构更复杂的文件,如xml、apache配置等,请使用augeas
type
我希望我的 Puppet class 创建一个文件资源,其内容基于特定定义类型的所有实例。我查看 this question 的想法是遍历实例以构建文件,但显然它是 "Bad Idea" 每个当前存在的答案。
一些背景:我正在 Puppet 中构建 monitor_service
class 以部署自定义监控应用程序。应用程序读取一个配置文件,告诉它要监视什么,每行一个项目,按照
ITEM: /var/things/thing-one (123)
ITEM: /var/things/thing-two (456)
我也在写一个部署监控项实例的定义类型:
define my_thing::monitored_thing ( $port ) {
file { "/var/things/$name":
...
}
}
在给定的节点上,我设置了几个 monitored_thing
s,例如
my_thing::monitored_thing { "thing-one":
port => 123
}
my_thing::monitored_thing { "thing-two":
port => 456
}
构建监控服务配置文件的 "right" Puppet 习惯用法是什么?我更希望它以这样一种方式工作,即 monitor_service
class 不必被告知它正在监视哪些 monitored_thing
个实例——只需创建一个 monitored_thing
实例应使其自动添加到配置文件中。
有几种方法可以 modify/declare 多个定义类型中的文件的一部分:
使用
puppetlabs-stdlib
的file_line
。这使您可以指定文件应包含特定行。当您不关心其他文件内容而只想确保某行存在或不存在时最好。如果您想确保最终文件仅包含您指定的片段或片段的顺序很重要,请使用
puppetlabs-concat
。如果你需要edit/add配置到结构更复杂的文件,如xml、apache配置等,请使用
augeas
type