人偶在循环中添加数组元素
puppet adding array elements in a loop
我想要这样的东西:
$ssl_domains = ['dev.mydomain.com']
['admin', 'api', 'web'].each |$site| {
['tom', 'jeff', 'harry'].each |$developer| {
$ssl_domains << "$site.$developer.dev.mydomain.com"
}
}
letsencrypt::certonly { 'dev-cert':
domains => $ssl_domains,
plugin => 'apache',
manage_cron => true,
}
现在不可能了,因为 Puppet 的变量作用域。如何通过嵌套循环收集数组中的一些变量?
您的尝试接近成功,但您使用了错误类型的 lambda。为了避免 Puppet 变量在同一范围内不可变并且如果在 lambda 中定义也不能在 lambda 范围之外使用这两个事实导致的问题,您必须使用右值 lambda https://en.wikipedia.org/wiki/Value_(computer_science)#R-values_and_addresses. I solved your problem using the rvalue lambda map
https://docs.puppet.com/puppet/latest/function.html#map.
$site_developer_base = ['admin', 'api', 'web'].map |$site| {
$developer_base = ['tom', 'jeff', 'harry'].map |$developer| {
"${site}.${developer}.dev.mydomain.com"
}
}
如果我执行 notify { $site_developer_base: }
输出:
Notice: admin.tom.dev.mydomain.com
Notice: admin.jeff.dev.mydomain.com
Notice: admin.harry.dev.mydomain.com
Notice: api.tom.dev.mydomain.com
Notice: api.jeff.dev.mydomain.com
Notice: api.harry.dev.mydomain.com
Notice: web.tom.dev.mydomain.com
Notice: web.jeff.dev.mydomain.com
Notice: web.harry.dev.mydomain.com
证明 $site_developer_base
有你想要的数组。
我想要这样的东西:
$ssl_domains = ['dev.mydomain.com']
['admin', 'api', 'web'].each |$site| {
['tom', 'jeff', 'harry'].each |$developer| {
$ssl_domains << "$site.$developer.dev.mydomain.com"
}
}
letsencrypt::certonly { 'dev-cert':
domains => $ssl_domains,
plugin => 'apache',
manage_cron => true,
}
现在不可能了,因为 Puppet 的变量作用域。如何通过嵌套循环收集数组中的一些变量?
您的尝试接近成功,但您使用了错误类型的 lambda。为了避免 Puppet 变量在同一范围内不可变并且如果在 lambda 中定义也不能在 lambda 范围之外使用这两个事实导致的问题,您必须使用右值 lambda https://en.wikipedia.org/wiki/Value_(computer_science)#R-values_and_addresses. I solved your problem using the rvalue lambda map
https://docs.puppet.com/puppet/latest/function.html#map.
$site_developer_base = ['admin', 'api', 'web'].map |$site| {
$developer_base = ['tom', 'jeff', 'harry'].map |$developer| {
"${site}.${developer}.dev.mydomain.com"
}
}
如果我执行 notify { $site_developer_base: }
输出:
Notice: admin.tom.dev.mydomain.com
Notice: admin.jeff.dev.mydomain.com
Notice: admin.harry.dev.mydomain.com
Notice: api.tom.dev.mydomain.com
Notice: api.jeff.dev.mydomain.com
Notice: api.harry.dev.mydomain.com
Notice: web.tom.dev.mydomain.com
Notice: web.jeff.dev.mydomain.com
Notice: web.harry.dev.mydomain.com
证明 $site_developer_base
有你想要的数组。