coding-style - persona - confeccion de titeres
Títere: ¿Cómo puedo ajustar un comando en dos líneas si> 80 caracteres? (4)
En Puppet, si el comando define es> 80 caracteres, ¿cómo puedo ajustar en dos líneas para hacerlo?
exec { ''create_domain'':
command => "some command exceed 80 character...........................................................how to do how to do?.......",
}
A partir de Puppet 3.5 tienes un par de opciones que he usado. Ruby te permite concentrar cadenas en un par de líneas.
string = "line #1"/
"line #2"/
"line #3"
p string # => "line #1line #2line #3"
Otra opción, a partir de Puppet 3.5, han agregado la funcionalidad HereDoc. Esto le permitirá colocar la cadena en una sección de un archivo de código fuente que se tratará como si fuera un archivo separado.
$mytext = @(EOT)
This block of text is
visibly separated from
everything around it.
| EOT
La documentación de títere está aquí: https://docs.puppet.com/puppet/4.9/lang_data_string.html#heredocs
Es algo feo, pero si el último carácter de una cadena es un ''/' seguido de una nueva línea, entonces la cadena continúa en la siguiente línea. Mi manifiesto de muestra.pp está abajo:
class test {
exec { ''create_domain'':
command => "/bin/echo 1234567890123456789012345678901234567890123456789012345678901234567890/
wrapped > /var/tmp/test.txt";
}
}
node ''pwan-central'' {
include test
}
Ejecutar esto con ''puppet apply sample.pp'' en un Ubuntu 11.10 con Puppet 2.7.1 da el siguiente resultado
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
Y catting el archivo creado muestra las líneas se han envuelto:
mrpwan@pwan-central:~$ cat /var/tmp/test.txt
1234567890123456789012345678901234567890123456789012345678901234567890wrapped
Ver https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#L537 (a partir de Puppet v2.7.0)
También se trata de un problema conocido: http://projects.puppetlabs.com/issues/5022
Para grandes cantidades de datos, los heredocs son la mejor manera de lidiar con largas filas en los manifiestos Puppet. La opción de interpolación /L
es particularmente útil. /L
hace que /
al final de una línea elimine las nuevas líneas. Por ejemplo, lo siguiente hace lo que cabría esperar, eliminando la sangría y las nuevas líneas, incluida la nueva línea final.
sshkey { ''example.com'':
ensure => present,
type => ''ssh-rsa'',
key => @(KEY/L),
RfrXBrU1T6qMNllnhXsJdaud9yBgWWm6OprdEQ3rpkTvCc9kJKH0k8MNfKxeBiGZVsUn435q/
e83opnamtGBz17gUOrzjfmpRuBaDDGmGGTPcO8Dohwz1zYuir93bJmxkNldjogbjAWPfrX10/
8aoDw26K12sK61lOt6GTdR9yjDPdG4zL5G3ZjXCuDyQ6mzcNHdAPPFRQdlRRyCtG2sQWpWan/
3AlYe6h6bG48thlo6vyNvOD8s9K0YBnwl596DJiNCY6EsxnSAhA3Uf9jeKqlVqqrxhEzHufx/
07iP1nXIXCMUV
|-KEY
target => ''/home/user/.ssh/known_hosts'',
}
Si realmente te importa el límite de 80cols, siempre puedes abusar de una plantilla para lograr ese objetivo
exec {''VeryLongExec'':
command => template("${module}/verylongexec")
}
Luego ponga el comando real en ese archivo de plantilla
Los créditos deben ir a Jan Vansteenkiste para calcular