我正在尝试创建具有相同结构的递归目录:
我有跟随者:
/ some-1 / some-2 / some-3 / some-4
并且在每个内部我都想创建相同的结构,让它命名为pool:
如阿尔伯特所建议的那样,优雅的解决方案可能是通过木偶的“定义”方法。/ some-1 / pool / some-2 / pool / some-3 / pool / some-4 / pool
define create_pool {
file { "/some-$title/pool":
ensure => "directory",
recurse => "true",
}
}
create_pool { [1,2,3,4]: }
幸运的是,这个解决方案在列表中“循环”:
答案 0 :(得分:3)
您可以先手动创建一个目录数组:
$directories = split('/some/path/to/somewhere', '/')
然后在循环中创建它们:
each($directories) |$directory| {
if ! defined (File[$directory]) {
file { $directory: ensure => directory }
}
}
我正在使用,如果没有定义,以确保我在重用路径部分的不同模块/类之间没有冲突。
编辑: 您可能需要将parser = future添加到puppet.conf中以使循环起作用。
答案 1 :(得分:2)
define create_pool {
file { "/some-$title":
ensure => "directory"
}
file { "/some-$title/pool":
ensure => "directory"
}
}
create_pool { ["a", "b", "c", "d"]: }
一个定义自动循环其“参数”:)
答案 2 :(得分:0)
到目前为止,我发现并且它有效,来自另一个SO Question,我可以通过这种方式创建并确保每个目录中都有一个文件,但我希望找到一种方法循环超过[some-1,some-2,some-3,some-4]
file{[ "/some-1/pool" , "/some-2/pool" , "/some-3/pool" , "/some-4/pool" ] :
ensure => "directory",
recurse => "true",
[ "/some-1/pool/setup" , "/some-2/pool/setup" , "/some-3/pool/setup" , "/some-4/pool/setup" ] :
ensure => "present",
content => template("some/setupPool.erb");
}