人偶中的数组转换以最终加入并包含在命令中
Array transformation in puppet for eventual joining and inclusion in a command
这听起来微不足道,但我无法全神贯注于我需要做的事情!我有:
$nodes = ["node1", "node2", "node3"]
我想这样结束:
$somestring = "node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380"
我试过这个:
$nodes = ['node1','node2','node3']
$nodes2 = $nodes
$merged = concat($nodes, $nodes2)
$sorted = sort($merged)
$test = $sorted.reduce |$memo, $value | {
"${memo} = http://$value:2380,"
}
notify {"nodelist is $test":}
但给我:
node1=http://node1:2380,=http://node2:2380,=http://node2:2380,=http://node3:2380,=http://node3:2380,
我的想法是,在可能需要向该集群添加节点的情况下,一旦我准备好节点,我就可以向数组添加一个条目。
使用您的命名约定,我们从数组开始:
$nodes = ['node1', 'node2', 'node3']
然后我们需要使用 map
lambda 迭代器 (https://puppet.com/docs/puppet/5.5/function.html#map) 在数组的每个元素中插入字符串两次:
$somearray = $nodes.map |$node| {
"${node}=http://${node}:2380"
}
# $somearray = ['node1=http://node1:2380', 'node2=http://node2:2380', 'node3=http://node3:2380']
此时,我们可以进行 Tuple/Array 到字符串的转换 (https://puppet.com/docs/puppet/5.5/function.html#array--tuple-to-string), but this would require complicated flags for delimiter notation and a possible regular expression substitution afterward. Much easier would be to use join
from puppetlabs-stdlib, which is present in almost every Puppet environment (https://forge.puppet.com/puppetlabs/stdlib#join):
$somestring = join($somearray, ',')
# $somestring = 'node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380'
有趣的事实:split
是一个 Puppet 内部函数,但 join
需要 stdlib。不确定那是怎么发生的。
这听起来微不足道,但我无法全神贯注于我需要做的事情!我有:
$nodes = ["node1", "node2", "node3"]
我想这样结束:
$somestring = "node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380"
我试过这个:
$nodes = ['node1','node2','node3']
$nodes2 = $nodes
$merged = concat($nodes, $nodes2)
$sorted = sort($merged)
$test = $sorted.reduce |$memo, $value | {
"${memo} = http://$value:2380,"
}
notify {"nodelist is $test":}
但给我:
node1=http://node1:2380,=http://node2:2380,=http://node2:2380,=http://node3:2380,=http://node3:2380,
我的想法是,在可能需要向该集群添加节点的情况下,一旦我准备好节点,我就可以向数组添加一个条目。
使用您的命名约定,我们从数组开始:
$nodes = ['node1', 'node2', 'node3']
然后我们需要使用 map
lambda 迭代器 (https://puppet.com/docs/puppet/5.5/function.html#map) 在数组的每个元素中插入字符串两次:
$somearray = $nodes.map |$node| {
"${node}=http://${node}:2380"
}
# $somearray = ['node1=http://node1:2380', 'node2=http://node2:2380', 'node3=http://node3:2380']
此时,我们可以进行 Tuple/Array 到字符串的转换 (https://puppet.com/docs/puppet/5.5/function.html#array--tuple-to-string), but this would require complicated flags for delimiter notation and a possible regular expression substitution afterward. Much easier would be to use join
from puppetlabs-stdlib, which is present in almost every Puppet environment (https://forge.puppet.com/puppetlabs/stdlib#join):
$somestring = join($somearray, ',')
# $somestring = 'node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380'
有趣的事实:split
是一个 Puppet 内部函数,但 join
需要 stdlib。不确定那是怎么发生的。