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

时间:2013-02-14 22:29:35

标签: string-concatenation puppet

这是我的天真方法:

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

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

6 个答案:

答案 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 '}'