木偶递归目录创建

时间:2014-02-19 13:51:58

标签: recursion puppet

我正在尝试创建具有相同结构的递归目录:

我有跟随者:

  

/ 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]: }

幸运的是,这个解决方案在列表中“循环”:

3 个答案:

答案 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");
}