1

使用 puppet,我需要创建三个文件,内容如下:

/tmp/f1.txt: hello /tmp/f1.txt
/tmp/f2.txt: hello /tmp/f2.txt
/tmp/f3.txt: hello /tmp/f3.txt

我尝试如下:

$path="/tmp/"
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"]
file { $my_files:
  ensure => file,
  content => "hello $name\n",
}  

但是这不起作用,因为 $name 未定义。

是否有一个变量可以为每个“迭代”实例化并且我可以使用?

ps:我知道我可以创建一个新的资源类型,如下所示:

define file_with_content {
  file { $name:
    ensure => file,
    content => "hello $name\n",
  }  
}
$path="/tmp/"
$my_files = ["$path/f1.txt", "$path/f2.txt", "$path/f3.txt"]
file_with_content { $my_files: }

但这需要创建一个新的资源类型,我不能在我的上下文中这样做(这里没有解释)。

问题是,如何修改第一个代码以使其工作,而不定义新的资源类型,也不执行 shell 代码?

4

1 回答 1

2

您只能访问namevar定义的类型。对于 Puppet 的资源,结果是不可预测的——例如$namefor Filewill give you main,或者 current stage. 此外,您不能向 Puppet 的资源传递/使用额外的参数,因为它们已经有自己的参数集。

标准解决方案是将File声明包装在定义的类型中,就像你的第一个一样。也许您可以解释为什么不能使用它,因此可以设计其他解决方案?

于 2013-10-12T08:04:16.427 回答