Hier ist mein naiver Ansatz:
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Das funktioniert nicht. Wie funktioniert eine Zeichenfolge in Puppet verkettet?
Interpolation von Keyword-Variablen:
$value = "${one}${two}"
Quelle: http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation
Beachten Sie, dass die Verwendung der geschweiften Klammern zwar immer möglich ist, Sie sie jedoch immer verwenden sollten.
Ich verwende das Konstrukt, bei dem ich die Werte in ein Array stecke und sie dann "verbinde". In diesem Beispiel ist meine Eingabe ein Array, und nachdem diese mit der ': 2181' verbunden wurden, wird der resultierende Wert erneut eingefügt ein Array, das mit einer leeren Zeichenfolge als Trennzeichen verbunden ist.
$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')
resultierender Wert von $ mesosZK
zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
Eine andere Option, die in anderen Antworten nicht erwähnt wird, ist die Verwendung der Puppets sprintf()
- Funktion, die identisch mit der Ruby-Funktion dahinter funktioniert. Ein Beispiel:
$x = sprintf('hello user %s', 'CoolUser')
Verifiziert, perfekt mit der Puppe zu arbeiten. Wie von chutz erwähnt, kann dieser Ansatz auch dazu beitragen, die Ausgabe von Funktionen zu verketten.
Folgendes hat für mich gearbeitet.
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
Folgendes funktioniert auch:
$abc = "def"
file { "/tmp/$abc":
Wie in docs angegeben, können Sie einfach die Interpolation $ {varname} verwenden. Und das funktioniert auch bei Funktionsaufrufen:
$mesosZK = "zk://${join($zookeeperservers,':2181,')}:2181/mesos"
$x = "${dirname($file)}/anotherfile"
{} Konnte jedoch nicht mit Funktionsargumenten verwendet werden: got Syntax error at '}'
.
Sie können die join () - Funktion von puppetlabs-stdlib verwenden. Ich dachte, es sollte dort eine String-Concat-Funktion geben, aber ich sehe es nicht. Es wäre leicht, eine zu schreiben.