Puppet 中的数组

Puppet 中的数组

我想知道如何解决以下木偶问题:我想基于字符串数组创建多个文件。复杂之处在于我想用这些文件创建多个目录:

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, }

这行不通,因为文件资源标题冲突。所以我需要将目录名称附加到文件标题,但是,这会导致文件数组被连接起来,而不是被视为多个文件……

啊……

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

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

答案1

您可以使用regsubst()函数修改字符串数组并返回一个数组。请参阅Puppet 功能参考

$filenames = ['fileA', 'fileB', 'fileC']
$filepaths_dir1 = regsubst($filenames, '^', '/path/to/dir1/')

file {$filepaths_dir1:
    ensure => present,
}

请记住,file资源标题需要是完全限定路径,或者必须使用参数指定完整路径。为文件path指定可能达不到您想要的效果。path => 'dir1'

答案2

我已经有一段时间没有用过它了,但是定义应该可以处理你想要的东西。

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',
}

相关内容