在 Puppet 中循环数组

Looping an Array in Puppet

我正在尝试管理位于 100 个不同目录中的 puppet 中的文件。该文件在每个目录中都是相同的。

我有一个目录名称数组,如下所示:

$directories = [ 'dir1' , 'dir2' , 'dir3' , 'dir4' , 'dir5' ]

这里是完整的目录路径:

file { "/var/www/assets/${directories}":
ensure  =>   "directory",
owner   =>   "apache",
group   =>   "apache",
mode    =>   750,
}

下面是有问题的文件:

file { "/var/www/assets/${directories}/.htaccess":
ensure  =>   present,
owner   =>   "apache",
group   =>   "apache",
mode    =>   644,
source  =>   "puppet:///modules/apache/.htaccess",
}

现在的问题是当 puppet 运行 它正在查看文件路径而不是遍历数组,而是将目录数组视为单个字符串,如下所示:

"/var/www/assets/dir1dir2dir3dir4dir5/.htaccess"

谁能给我指出正确的方向,这样我就可以遍历每个目录,确保每个目录中都有一个 .htaccess 文件,并且 .htaccess 文件与 .htaccess 文件相同在我的来源中 =>

提前致谢。

如果您是 运行 最近的 Puppet 并且启用了未来的解析器,那么您可以这样做:

each($directories) |$directory| {
  file { "/var/www/assets/${directory}/.htaccess":
    ensure  =>   'file',
    owner   =>   'apache',
    group   =>   'apache',
    mode    =>   0644,
    source  =>   'puppet:///modules/apache/.htaccess',
  }
}

如果您使用的是较旧的 Puppet,或者不想启用(实验性的)future 解析器,或者只是喜欢以旧方式做事,那么您可以这样做:

$files = regsubst($directories, '.*', '/var/www/assets/[=11=]/.htaccess')
file { $files:
  ensure  =>   'file',
  owner   =>   'apache',
  group   =>   'apache',
  mode    =>   0644,
  source  =>   'puppet:///modules/apache/.htaccess',
}