Вот мой наивный подход:
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Это не работает. Как конкатенировать строки в Puppet?
Вот мой наивный подход:
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Это не работает. Как конкатенировать строки в Puppet?
Интерполяция переменных ключевого слова:
$value = "${one}${two}"
Источник: http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation
Обратите внимание, что, хотя он может работать без фигурных скобок, вы всегда должны их использовать.
Я использую конструкцию, где я помещаю значения в массив, а затем присоединяю их. В этом примере мой вход представляет собой массив, и после того, как они были соединены с ": 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
Другой вариант, не упомянутый в других ответах, заключается в использовании функции Puppet sprintf()
, которая функционирует идентично функция Ruby за ней. Пример:
$x = sprintf('hello user %s', 'CoolUser')
Проверено отлично работать с марионеткой. Как упоминалось в chutz, этот подход также может помочь вам конкатенацию функций.
Следующие работали для меня.
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":
Вы можете использовать функцию join() из puppetlabs-stdlib. Я думал, что там должна быть строка concat, но я этого не вижу. Его было бы легко написать.