webentwicklung-frage-antwort-db.com.de

Wie verketten Sie Zeichenfolgen in einer Puppet-.pp-Datei?

Hier ist mein naiver Ansatz:

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

Das funktioniert nicht. Wie funktioniert eine Zeichenfolge in Puppet verkettet?

46
rlandster

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.

66
czervik

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
21
Niels Basjes

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.

13
Mifeet

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":
1
Albert Turri

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 '}'.

0
Andrey Regentov

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.

0
mc0e