我有几个文件需要由Puppet创建,这些文件均基于模板。例如:
/etc/my-project/a.ini
/etc/my-project/b.ini
/etc/my-project/c.ini
我想做的是使用Puppet中的一条语句来确保所有这些文件。像这样的东西:
define myFile {
file { "/ect/init.d/$name.ini":
ensure => file,
content => template("myProject/myFiles/$name.erb"),
}
}
myFile { ['a', 'b', 'c']: }
但是,这似乎不起作用(受How to iterate over an array in Puppet启发)。我在那里想念什么?如果不是$name
,如何访问文件名并使用它?
$name.erb
。您应该将其更改为固定的模板名称,例如template.erb
。另外要确保您的模板文件位于正确的位置。
module_name/templates/template.erb
并称为template("module_name/file_under_template_directory")
template("fully_qualified_path_to_template_file")
。最后,如果您仍然遇到错误,则应使用错误消息更新您的问题,以便我们缩小原因范围。
${name}
而不是$name
?如果不起作用,请检查您的模板文件(a.erb
; b.erb
; c.erb
)是否在<module_name>/templates/myProject/myFiles
目录中。
如果所有这些都不起作用,请发布您的错误消息。
define myFile($file_name) {
file { "/ect/init.d/${file_name}.ini":
ensure => file,
content => template("myProject/myFiles/${file_name}.erb"),
}
}
$values = {
item_1 => {file_name => "a"},
item_2 => {file_name => "b"},
item_3 => {file_name => "c"}
}
create_resources(myFile,$values)
['a', 'b', 'c'].each |String $name| {
file { "/ect/init.d/$name.ini":
content => template("myProject/myFiles/$name.erb"),
}
}
请参见puppet docs on iteration。