我在Puppet中进行了each
次迭代来安装Perl模块扩展:
$extensions_list = ["extension1",
"extension2",
]
$extensions_list.each |$extls| {
exec { $extls:
path => '/usr/local/bin/:/usr/bin/:/bin/',
command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/extension1-1.00.tar.gz",
}
}
我希望它也可以考虑版本号,如:
$extensions_list = ["extension1", "1.00",
"extension2", "2.00",
]
$extensions_list.each |$extls| {
exec { $extls:
path => '/usr/local/bin/:/usr/bin/:/bin/',
command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/extension1-1.00.tar.gz",
}
}
所以,我希望它能够在数组中使用前两个变量来安装第一个扩展,然后安装接下来的两个变量,然后安装它等等,因为我添加了新的扩展。这样我就可以将名称和版本号添加到我的数组中,然后依次安装它们。
答案 0 :(得分:2)
我在Puppet中进行了
each
次迭代来安装Perl模块扩展:
嗯,不,不完全是。您有一个each
运算符来声明与数组中每个元素对应的Exec
资源。与您所说的潜在重要区别在于,在目录构建期间对操作进行评估,因此当时没有进行实际安装。
所以,我希望它能够在数组中使用前两个变量来安装第一个扩展,然后安装接下来的两个并安装它等等
您可以使用slice()
函数将数组拆分为双元素数组的数组,并对其进行迭代。但是,考虑使用哈希而不是数组作为底层数据结构会更自然。例如:
$extensions_hash = {"extension1" => "1.00",
"extension2" => "2.00",
}
$extensions_hash.each |$extls, $extv| {
exec { $extls:
path => '/usr/local/bin/:/usr/bin/:/bin/',
command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/$extls-$extv.tar.gz",
}
}