这是我的天真方法:
# puppet/init.pp
$x = 'hello ' +
'goodbye'
这不起作用。 如何在Puppet中连接一个字符串?
答案 0 :(得分:66)
关键字变量插值:
$value = "${one}${two}"
来源:http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation
请注意,虽然没有花括号可能会有效,但您应该始终使用它们。
答案 1 :(得分:22)
我使用构造,我将值放入数组中,然后'加入'它们。 在这个例子中,我的输入是一个数组,在用':2181'连接之后,结果值再次放入一个数组中,该数组以空字符串作为分隔符连接。
$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')
$ mesosZK的结果值
zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
答案 2 :(得分:14)
其他答案中未提及的另一个选项是使用Puppet's sprintf()
函数,其功能与其后面的Ruby function相同。一个例子:
$x = sprintf('hello user %s', 'CoolUser')
经验证可与puppet完美配合。正如 chutz 所提到的,这种方法也可以帮助您连接函数的输出。
答案 3 :(得分:1)
以下对我有用。
puppet apply -e ' $y = "Hello" $z = "world" $x = "$y $z" notify { "$x": } '
notice: Hello world
notice: /Stage[main]//Notify[Hello world]/message: defined 'message' as 'Hello world'
notice: Finished catalog run in 0.04 seconds
以下也有效:
$abc = "def"
file { "/tmp/$abc":
答案 4 :(得分:0)
您可以使用puppetlabs-stdlib中的join()函数。我当时认为那里应该有一个字符串连接函数,但是我没有看到它。写一个很容易。
答案 5 :(得分:0)
如docs中所述,您只能使用$ {varname}插值。而且也可以与函数调用一起使用:
$mesosZK = "zk://${join($zookeeperservers,':2181,')}:2181/mesos"
$x = "${dirname($file)}/anotherfile"
尽管不能将{}与函数参数一起使用:得到了Syntax error at '}'
。