Dans la marionnette, si la commande définir est> 80 caractères, comment puis-je envelopper en deux lignes pour le faire?
exec { 'create_domain':
command => "some command exceed 80 character...........................................................how to do how to do?.......",
}
C'est une sorte de moche, mais si le dernier caractère d'une chaîne est un "\ 'suivi d'une nouvelle ligne, la chaîne est ensuite poursuivie sur la ligne suivante. Mon échantillon.PP manifeste est ci-dessous:
class test {
exec { 'create_domain':
command => "/bin/echo 1234567890123456789012345678901234567890123456789012345678901234567890\
wrapped > /var/tmp/test.txt";
}
}
node 'pwan-central' {
include test
}
En cours d'exécution avec 'pupette appliquer extult.pp' sur un Ubuntu 11.10 avec Puppet 2.7.1 donne la sortie suivante
mrpwan@pwan-central:~$ puppet apply sample.pp
notice: /Stage[main]/Test/Exec[create_domain]/returns: executed successfully
notice: Finished catalog run in 0.10 seconds
Et la chat du fichier créé montre que les lignes ont enveloppé:
mrpwan@pwan-central:~$ cat /var/tmp/test.txt
1234567890123456789012345678901234567890123456789012345678901234567890wrapped
Voir https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#l537 (à partir de Puppet V2.7.0)
Il s'agit également d'un problème connu: http://project.puppetlabs.com/issues/5022
À partir de Puppet 3.5, vous avez quelques options que j'ai utilisées. Ruby vous permet de concéder des chaînes sur quelques lignes.
string = "line #1"\
"line #2"\
"line #3"
p string # => "line #1line #2line #3"
Une autre option, à partir de la marionnette 3.5, ils ont ajouté une fonctionnalité Heredoc. Cela vous permettra de mettre la chaîne dans une section d'un fichier de code source traité comme s'il s'agissait d'un fichier distinct.
$mytext = @(EOT)
This block of text is
visibly separated from
everything around it.
| EOT
La documentation de la marionnette est ici: https://docs.puppet.com/puppet/4.9/lang_data_string.html#heredocs
Pour de gros morceaux de données, les Heredocs sont la meilleure façon de traiter de longues lignes dans les manifestations de marionnettes. Les /L
L'option d'interpolation est particulièrement utile. /L
causes \
À la fin d'une ligne pour éliminer les nouvelles lignes. Par exemple, ce qui suit, ce que vous attendez, en décapant une indentation et des nouvelles lignes, y compris la nouvelle ligne de fuite.
sshkey { 'example.com':
ensure => present,
type => 'ssh-rsa',
key => @(KEY/L),
RfrXBrU1T6qMNllnhXsJdaud9yBgWWm6OprdEQ3rpkTvCc9kJKH0k8MNfKxeBiGZVsUn435q\
e83opnamtGBz17gUOrzjfmpRuBaDDGmGGTPcO8Dohwz1zYuir93bJmxkNldjogbjAWPfrX10\
8aoDw26K12sK61lOt6GTdR9yjDPdG4zL5G3ZjXCuDyQ6mzcNHdAPPFRQdlRRyCtG2sQWpWan\
3AlYe6h6bG48thlo6vyNvOD8s9K0YBnwl596DJiNCY6EsxnSAhA3Uf9jeKqlVqqrxhEzHufx\
07iP1nXIXCMUV
|-KEY
target => '/home/user/.ssh/known_hosts',
}
Si vous vous souciez vraiment de la limite de 80cols, vous pouvez toujours abuser d'un modèle pour atteindre cet objectif
exec {'VeryLongExec':
command => template("${module}/verylongexec")
}
Puis mettre la commande réelle dans ce fichier de modèle
Les crédits devraient aller à Jan Vansteenkiste pour personnaliser