在Puppet中循环一个数组

时间:2015-04-08 19:13:45

标签: arrays loops 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文件相同source =>

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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

如果你正在使用较旧的Puppet,或者不想启用(实验性的)未来解析器,或者仅仅是以旧学校方式做事的粉丝,那么你可以这样做:

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