如何在Puppet .pp文件中连接字符串?

rla*_*ter 49 string-concatenation puppet

这是我的天真方法:

# puppet/init.pp
$x = 'hello ' + 
     'goodbye'
Run Code Online (Sandbox Code Playgroud)

这不起作用.如何没有一个拼接的木偶字符串?

cze*_*vik 68

关键字变量插值:

$value = "${one}${two}"
Run Code Online (Sandbox Code Playgroud)

资料来源:http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation

请注意,虽然它可以在没有花括号的情况下工作,但您应该始终使用它们.

  • 这是串联的替代方法,但不是所提出问题的答案。如果 OP 的需求得到满足,那很有用,但在很多情况下,这不会做到,至少没有中间步骤。例如,如果您试图避免在 puppet 代码中分配一千个字符长的字符串,并将整个内容放在一行中,或者您正在连接的内容之一是函数调用的输出。 (3认同)

Nie*_*jes 22

我使用构造,我将值放入一个数组,然后'加入'它们.在这个例子中,我的输入是一个数组,在用':2181'连接后,结果值再次放入一个数组中,该数组以空字符串作为分隔符连接.

$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')
Run Code Online (Sandbox Code Playgroud)

$ mesosZK的结果值

zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
Run Code Online (Sandbox Code Playgroud)

  • 这使用了puppetlabs-stdlib模块的[join](https://github.com/puppetlabs/puppetlabs-stdlib#join)函数,对于那些想知道的人. (3认同)

Mif*_*eet 16

其他答案中没有提到的另一个选项是使用Puppet的sprintf()函数,它的功能与它背后的Ruby函数相同.一个例子:

$x = sprintf('hello user %s', 'CoolUser')
Run Code Online (Sandbox Code Playgroud)

经验证可与木偶完美配合.正如chutz所提到的,这种方法也可以帮助您连接函数的输出.

  • 这样就可以连接函数的输出-其他答案不那么容易。例如`$ x = sprintf('%s /%s',dirname($ file),$ anotherfile)` (3认同)