Recursion 伪递归目录创建

Recursion 伪递归目录创建,recursion,puppet,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",

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

我有以下几条指令:

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

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

到目前为止,我发现的和有效的都是来自于另一个目录,我可以用这种方式创建并确保每个目录中都有一个文件,但我希望找到一种在[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");
}

您可以先手动或以下方式创建所需的目录数组:

$directories = split('/some/path/to/somewhere', '/')
然后在循环中创建它们:

each($directories) |$directory| {
  if ! defined (File[$directory]) {
    file { $directory: ensure => directory }
  }
}
我使用if-not-defined来确保重用部分路径的不同模块/类之间没有冲突

编辑: 可能需要将parser=future添加到puppet.conf中,循环才能工作

define create_pool {
  file { "/some-$title":
    ensure => "directory"
  }
  file { "/some-$title/pool":
    ensure => "directory"
  }
}

create_pool { ["a", "b", "c", "d"]: }

define自动循环其“参数”:)

我发现您必须显式创建每个层,我认为这是设计者的原则问题。但我很想学习其他方面的知识。显示了解决方案,但我认为可以找到一种方法来迭代$I someHow,如前所述,传递这样一个列表将不起作用,只是因为将创建错误的树:create_pool[3]/File[/some-1234/pool]/确保:从缺席更改为目录失败:无法创建/some-1234/pool;父目录/some-1234不存在。我需要的是/some-1/pool、/some-2/pool、/some-3/pool、/some-4/pool这是对示例代码的简单而明显的更改。。首先添加父目录的创建就足够了。。以同样的方式定义。。问题在于循环,而不是文件或目录的创建。。还是我遗漏了什么?无论如何,我在子目录之前编辑创建了父目录,TNX毫无疑问,因为您的解决方案与往常一样优雅(;),但您有时间尝试一下吗!?我将编辑问题,包括你的建议,不幸的是,这不是“循环”太多。它试图创建的是类似于/some-1234/pool的东西,而不仅仅是4个不同的dir。这就是问题存在的原因,事实上不是那么明显,我怀疑这项任务有点超出了puppet的范围/理念。我现在没有办法尝试,但它应该会起作用。。你确定问题不在于数字的使用吗?尝试使用4个字符串创建_pool{[“一”、“二”、“三”、“四”]:}顺便说一句,只需确认我的方法,即从第三级应用程序获得的数字,而不是经过验证的数字!关于你最后的评论,我解决了这个问题…还有什么。。。majora广告!我的天哪!