55

这是我天真的方法:

# puppet/init.pp
$x = 'hello ' + 
     'goodbye'

这不起作用。如何在 Puppet连接字符串?

4

6 回答 6

76

关键字变量插值:

$value = "${one}${two}"

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

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

于 2013-02-15T17:09:33.017 回答
24

我使用将值放入数组然后“加入”它们的构造。在这个例子中,我的输入是一个数组,在它们与 ':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
于 2014-10-22T12:29:20.190 回答
19

其他答案中未提及的另一个选项是使用Puppet 的sprintf()函数,该函数的功能与其背后的Ruby 函数相同。一个例子:

$x = sprintf('hello user %s', 'CoolUser')

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

于 2015-02-24T12:15:05.860 回答
2

以下对我有用。

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":
于 2013-02-15T01:09:11.553 回答
0

您可以使用 puppetlabs-stdlib 中的 join() 函数。我在想那里应该有一个字符串 concat 函数,但我没有看到它。写一个很容易。

于 2015-03-27T06:05:08.093 回答
0

docs中所述,您可以只使用 ${varname} 插值。这也适用于函数调用:

$mesosZK = "zk://${join($zookeeperservers,':2181,')}:2181/mesos"
$x = "${dirname($file)}/anotherfile"

但无法将 {} 与函数参数一起使用:得到Syntax error at '}'.

于 2018-11-23T03:27:37.620 回答