Puppet:基于模板的多个文件

Puppet:基于模板的多个文件,puppet,Puppet,我有几个文件,我需要由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/myFil

我有几个文件,我需要由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']: }

然而,这似乎不起作用(灵感来自)。我错过了什么?如果不是作为
$name
,如何访问文件名并使用它?

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

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

  • 如果您的清单位于模块中,则模板应位于
    module\u name/templates/template.erb
    并称为
    template(“模板目录下的模块名称/文件”)

  • 如果它是一个独立的清单,您必须将完整路径改为
    template(“完全限定的路径到模板文件”)


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

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

如果不起作用,请检查模板文件(
a.erb
b.erb
c.erb
)是否在
/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"),
    }
}