木偶使用嵌套散列和数组

我想签出几个SVN项目,我需要能够为每个分支或中继select目录名称。

现在我想检查名为svn_name的SVN项目在文件夹service_dir和该文件夹我想要创build一个树干文件夹和分支文件夹与所有分支。

— SVN文件夹

——–分行

————— branch1_name

————— branch2_name

——- trunk_name

我有我的散列结构如下

$hash = { 'svn_name' => { service_dir => 'directory_name', branch => [ { branch => '0.1', branch_dir => 'branch1_name'}, { branch => '0.2', branch_dir => 'branch2_name'} ], trunk => { service_dir => 'trunk_name'}, } } 

现在我使用散列和我定义的typescreate_resources来创build必要的文件夹并检出工作副本。

问题是我无法迭代我的分支数组,我不知道如何访问哈希值内的值。

 define test ( $service_dir, $branch, $trunk ){ file { "/xxx/${service_dir}/branches/${branch[branch_dir]}": ensure => present } } 

我如何访问variables? 还是有更简单的方法来完成这个? 我不想使用vcsrepo或类似的模块,因为我还是新来的木偶,需要练习。

编辑1:我可能不需要散列的树干,对吧? trunk =>'trunk_name'应该就够了

为了更快地实现你的目标,我强烈build议使用github上的PuppetLabs提供的vcsrepotypes,或者伪造木偶 。 这包装了大多数常见的VCS工具,包括Subversion。 只是为了防止你重新发明车轮。

关于你的傀儡语法问题,我已经从手册中稍微调整了一下例子来适应你的问题:

 $foo = "key" $myhash = [ { key => "some value 0", other_key => "some other value 0" }, { key => "some value 1", other_key => "some other value 1" } ] notice( $myhash[0][$foo] ) notice( $myhash[1][$foo] ) 

testing它:

 % puppet apply foo.pp Notice: Scope(Class[main]): some value 0 Notice: Scope(Class[main]): some value 1 Notice: Finished catalog run in 0.08 seconds