在木偶arrays

我想知道如何解决下面的木偶问题:我想创build几个基于string数组的文件。 复杂的是我想用这些文件创build多个目录:

dir1/ fileA fileB dir2/ fileA fileB fileC 

问题是文件资源标题必须是唯一的。 因此,如果我将文件名保存在一个数组中,我需要以自定义的方式遍历数组,以便能够使用目录名称来后缀文件名:

 $file_names = ['fileA', 'fileB'] $file_names_2 = [$file_names, 'fileC'] file {'dir1': ensure => directory } file {'dir2': ensure => directory } file { $file_names: path = 'dir1', ensure =>present, } file { $file_names_2: path = 'dir2', ensure =>present, } 

这不会工作,因为文件资源标题冲突。 所以我需要附加例如目录名称的文件标题,但是,这将导致文件数组被连接,不被视为多个文件…

arghh ..

 file { "${file_names}-dir1": path = 'dir1', ensure =>present, } file { "${file_names_2}-dir2": path = 'dir1', ensure =>present, } 

如何解决这个问题,而不必重复文件资源本身。 谢谢

您可以使用regsubst()函数来修改一个string数组并返回一个数组。 请参阅Puppet函数参考 。

 $filenames = ['fileA', 'fileB', 'fileC'] $filepaths_dir1 = regsubst($filenames, '^', '/path/to/dir1/') file {$filepaths_dir1: ensure => present, } 

请记住, file资源标题必须是完全限定的path,否则必须使用path参数指定完整path。 指定path => 'dir1'的文件可能不会做你想做的。

自从我用这个以来已经有一段时间了,但是一个定义应该能够处理你想要的东西。

 define myfiles::config ($directory_name, $file_name) { ; add command to create directories if needed file { "myfiles/conf.d/$directory_name/$file_name": ensure => present, ... } } $directory_name= <from array> $file_name= <from array> ; loop the following statement myfiles::config { "$directory_name-$file_name": directory_name => 'dir1', file_name => 'file', }