En esta sentido son muy interesantes estos defines para gestionar ficheros de texto: permiten, entre otras cosas, añadir o borrar líneas de los mismos. Mi compañero Esteban los ha mejorado mucho, como podemos ver en su blog.
Por mi parte, y basándome en lo anterior he programado varias funciones más. La primera permite añadir una línea por encima de otra identificada por un patrón:
# cat /etc/puppet/defines/add_line_above.pp
#Añade la linea "line" al fichero "file", siempre que la cadena "search" no esté en el fichero.
#La línea la añade inmediatamente por encima de la línea que contenga la cadena "above".
#Usado por ejemplo para añadir lineas a /etc/rc.local por encima del "exit 0" con el cual
#siempre finaliza dicho script.
define add_line_above($file, $line, $search, $above) {
exec { "/bin/sed -i --follow-symlinks '/${above}/i\\${line}' '${file}' ":
unless => "/bin/grep -q '${search}' '${file}'"
}
}
La segunda permite añadir una línea por debajo de otra identificada por un patrón:# cat /etc/puppet/defines/add_line_below.pp
#Añade la linea "line" al fichero "file", siempre que la cadena "search" no esté en el fichero.
#La línea la añade inmediatamente por debajo de la línea que contenga la cadena "below".
#En resumen: añade lineas al script por debajo de una linea dada, siempre y cuando no encuentre
# un patrón en el fichero.
define add_line_below($file, $line, $search, $below) {
exec { "/bin/sed -i --follow-symlinks '/${below}/a ${line}' '${file}' ":
unless => "/bin/grep -q '${search}' '${file}'"
}
}
La tercera permite añadir una línea en una posicion concreta dentro del fichero.# cat /etc/puppet/defines/add_line_number.pp
#Añade la linea "line" al fichero "file", siempre que la cadena "search" no esté en el fichero.
#La ubica justo despues de la línea "pos" del fichero, quedando en la linea "pos+1" y desplazando
#las posteriores hacia abajo.
define add_line_number($file, $line, $search, $pos) {
exec { "/bin/sed -i --follow-symlinks '${pos} a ${line}' '${file}' ":
unless => "/bin/grep -q '${search}' '${file}'"
}
}
Comentarios:- Estos ficheros .pp se guardarán /etc/puppet/defines/... del servidor puppet.
- Dentro de nuestras clases haremos al comienzo import "/etc/puppet/defines/*.pp" para poder usarlos.
- El --follow-symlinks del sed sirve para que si el fichero es un enlace simbólico que apunta a un fichero real ubicado en otro lugar, los cambios se hagan sobre el fichero real. Si no se especifica sed crea un nuevo fichero distinto del fichero real, que permanece inalterado.
- En los tres casos file es el fichero donde buscar, line es la línea a insertar y search es la cadena a buscar para determinar si se inserta o no lo la línea.
- El cuarto parámetro depende de la funcion.
import "/etc/puppet/defines/*.pp"
class .... {
#============================================================================================================================
#Anade a rc.local (si no esta ya) el codigo que desactiva en el arranque la tarjeta de audio HDMI de la tarjeta grafica
#lo hace justo antes de la linea exit 0.
add_line_above { desactiva_audio_hdmi_siatic:
file=> "/etc/rc.local",
line=> 'bus=$(lspci | grep "Audio device: NVIDIA Corporation" | cut -d" " -f1) ; test -n $bus && echo 1 > "/sys/bus/pci/devices/0000:$bus/remove"',
search=> "NVIDIA Corporation",
above=> "^exit 0$"
}
#============================================================================================================================
#Anade a etckeeper-commit-post (si no esta ya) una llamada al script /usr/bin/puppet_post_send
#lo hace justo después la linea que contiene PATH.
add_line_below { run_post_puppet:
file=> "/etc/puppet/etckeeper-commit-post",
line=> '/usr/bin/puppet_post_send',
search=> "/usr/bin/puppet_post_send",
below=> "PATH"
}
}
Nos despedimos con un consejo del Estado:
Muchas gracias por tus post.
ResponderEliminarEn estas fechas tan e(n||x)trañables, os regalo cientos de libros gratis, de todas las temáticas.
La web de descarga es https://openlibra.com y encontraréis libros bajo licencia CC como este:
https://openlibra.com/es/book/the-debian-administrators-handbook-ed-2013 Si quereis, podeis donar via paypal.
De nada.