Ecco il mio approccio ingenuo:Come si concatenano le stringhe in un file .pp di Puppet?
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Questo non funziona. Come fa una stringa concatena in Puppet?
Ecco il mio approccio ingenuo:Come si concatenano le stringhe in un file .pp di Puppet?
# puppet/init.pp
$x = 'hello ' +
'goodbye'
Questo non funziona. Come fa una stringa concatena in Puppet?
chiave di interpolazione variabile:
$value = "${one}${two}"
Fonte: http://docs.puppetlabs.com/puppet/4.3/reference/lang_variables.html#interpolation
Nota che, anche se potrebbe funzionare senza le parentesi graffe, è dovrebbe sempre usarli
Inoltre, non funzionerà solo in un assegnazione variabile come dimostrato sopra. Se vuoi usarlo in una regola fantoccio dopo '=>' prima assegnalo a una variabile, quindi usa la variabile dopo '=>'. – Tully
Dovrebbe funzionare bene dopo un '=>', Tully. Quale versione di Puppet stai usando? – Nick
Questa è un'alternativa alla concatenazione, ma non una risposta alla domanda come posta. Se il bisogno dell'OP è soddisfatto, è utile, ma ci sono molti casi in cui questo non funzionerà, almeno senza passaggi intermedi. Per esempio. se si sta tentando di evitare di assegnare una stringa lunga di un migliaio di caratteri nel codice puppet con il tutto su una riga, o se una delle cose che si concatenano è l'uscita di una chiamata di funzione. – mc0e
Quanto segue ha funzionato per me.
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
Le seguenti opere così:
$abc = "def"
file { "/tmp/$abc":
Sfortunatamente, questo non funziona quando uno dei termini è un'espressione. * Es. *, '$ foo = regsubst ($ bar, '/', '-', 'G') + $ version' – RoUS
È possibile inserire prima l'espressione dell'espressione in un'altra variabile intermedia. cioè '$ temp = regsubst ($ bar, '/', '-', 'G')' e quindi '$ foo =" $ {temp} $ {versione} "' – mc0e
Uso il costrutto in cui inserisco i valori in un array e li "unisco". In questo esempio il mio input è un array e dopo che quelli sono stati uniti con ': 2181', il valore risultante viene di nuovo messo in una matrice che viene unita con una stringa vuota come separatore.
$zookeeperservers = [ 'node1.example.com', 'node2.example.com', 'node3.example.com' ]
$mesosZK = join([ "zk://" , join($zookeeperservers,':2181,') ,":2181/mesos" ],'')
conseguente valore di $ mesosZK
zk://node1.example.com:2181,node2.example.com:2181,node3.example.com:2181/mesos
Utilizza il modulo [join] di puppetlabs-stdlib (https: // github.com/puppetlabs/puppetlabs-stdlib # join) funzione, per chi si chiede. – MrAlias
Un'altra opzione non menzionato in altre risposte sta usando Puppet's sprintf()
funzione, che funziona in modo identico alla Ruby function dietro di esso. Un esempio:
$x = sprintf('hello user %s', 'CoolUser')
Verificato per funzionare perfettamente con fantoccio. Come menzionato da chutz, questo approccio può anche aiutarti a concatenare l'output delle funzioni.
In questo modo è possibile concatenare l'output di funzioni - qualcosa di non facile con altre risposte. Per esempio. '$ x = sprintf ('% s /% s', dirname ($ file), $ anotherfile)' – chutz
È possibile utilizzare la funzione join() di puppetlabs-stdlib. Stavo pensando che lì dovrebbe esserci una funzione di concat di stringhe, ma non la vedo. Sarebbe facile scriverne uno.
Non ho fatto esattamente la domanda giusta. Quello che avrei dovuto chiedere è che c'è un operatore di concatenazione di stringhe nella Puppet DSL? Sembra che al momento non ci sia nulla di simile: http://projects.puppetlabs.com/issues/15330 – rlandster