web-dev-qa-db-fra.com

Comment concaténez-vous des chaînes dans un fichier .pp de marionnette?

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?

46
rlandster

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.

66
czervik

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

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.

13
Mifeet

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

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

0
Andrey Regentov

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.

0
mc0e