Puppet:基于模板的多个文件

问题描述 投票:5回答:4

我有几个文件需要由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,如何访问文件名并使用它?

puppet
4个回答
5
投票
您的数组声明很好,但是您实际上是在尝试创建多个模板,所有模板都使用不同的文件名$name.erb。您应该将其更改为固定的模板名称,例如template.erb

另外要确保您的模板文件位于正确的位置。

  • 如果清单是在模块中,则模板应位于module_name/templates/template.erb并称为template("module_name/file_under_template_directory")
  • 如果是独立清单,则必须输入完整路径,template("fully_qualified_path_to_template_file")

最后,如果您仍然遇到错误,则应使用错误消息更新您的问题,以便我们缩小原因范围。


0
投票
您是否尝试使用${name}而不是$name

如果不起作用,请检查您的模板文件(a.erb; b.erb; c.erb)是否在<module_name>/templates/myProject/myFiles目录中。

如果所有这些都不起作用,请发布您的错误消息。


0
投票
尝试一下...它将以优雅的方式满足您的目的。

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)


0
投票
['a', 'b', 'c'].each |String $name| { file { "/ect/init.d/$name.ini": content => template("myProject/myFiles/$name.erb"), } }
请参见puppet docs on iteration
© www.soinside.com 2019 - 2024. All rights reserved.