Voici mon approche naïve:
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Cela ne fonctionne pas. Comment fait on concatène des chaînes dans Puppet?
Interpolation de variable de mot clé:
$value = "${one}${two}"
Source: http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation
Notez que bien que cela puisse fonctionner sans les accolades, vous devriez toujours les utiliser.
J'utilise la construction où je mets les valeurs dans un tableau et ensuite 'les rejoindre' . Dans cet exemple, mon entrée est un tableau et après que celles-ci aient été jointes avec le ': 2181,' la valeur résultante est à nouveau placée dans un tableau qui est joint avec une chaîne vide en tant que séparateur.
$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')
valeur résultante de $ mesosZK
zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
Une autre option non mentionnée dans les autres réponses consiste à utiliser la fonction sprintf()
de Puppet, qui fonctionne de manière identique à la fonction Ruby derrière celle-ci. Un exemple:
$x = sprintf('hello user %s', 'CoolUser')
Vérifié pour fonctionner parfaitement avec la marionnette. Comme mentionné dans chutz, cette approche peut également vous aider à concaténer la sortie des fonctions.
Ce qui suit a fonctionné pour moi.
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
Ce qui suit fonctionne aussi bien:
$abc = "def"
file { "/tmp/$abc":
Comme indiqué dans docs , vous pouvez simplement utiliser l’interpolation $ {varname}. Et cela fonctionne aussi avec les appels de fonction:
$mesosZK = "zk://${join($zookeeperservers,':2181,')}:2181/mesos"
$x = "${dirname($file)}/anotherfile"
Impossible d'utiliser {} avec les arguments de la fonction: got Syntax error at '}'
.
Vous pouvez utiliser la fonction join () de puppetlabs-stdlib. Je pensais qu'il devrait y avoir une fonction concat string, mais je ne la vois pas. Ce serait facile d'en écrire un.