En muchas ocasiones puede por el motivo que sea no interesarnos que un script se ejecute en todos los equipos al mismo tiempo, por ejemplo, para no colapsar una línea o un servidor. Si empleamos puppet para tener todos los datos y configuraciones sincronizadas, eso puede resultar algo complicado, pues lo que se escribe en un equipo se escribe en el resto. Si bien es cierto que para cada equipo se pueden definir diferentes tareas, imaginaros tener que 'configurar' una misma tarea para todos los equipos uno a uno, para eso no empleamos un sistema de meta-administración!
Pues bien, si partimos de la configuración de tarea cron habitual,
cron { "update mirror":
command => "/usr/local/sbin/update_mirror",
user => root,
hour => 18,
minute => 30,
subscribe => File["/usr/local/sbin/update_mirror"],
ensure => present;
}
aquí vemos que en todos los equipos que tengan configurado este cron, ejecutará el script /usr/local/sbin/update_mirror a las 18:30 todos los días. En este caso, el script consume un considerable ancho de banda, así que si por el motivo que sea se ejecuta en 5 equipos, puede dejarnos sin ancho de banda para trabajar. Por lo tanto... lo ideal sería poder ejecutarlo a horas diferentes, así que... desde puppet, ¿cómo lo hacemos?
$hour = fqdn_rand(23)
cron { "update mirror":
command => "/usr/local/sbin/update_mirror",
user => root,
hour => $hour,
minute => 30,
subscribe => File["/usr/local/sbin/update_mirror"],
ensure => present;
}
Pues bien, simplemente creamos una variable que pueda tener un valor aleatorio de 0 a 23 y dependiente del cliente y éste lo escribimos en $hour. Ahora al actualiza el cliente veremos lo siguiente,
shell> puppetd agent --test
info: Caching catalog for mirror.cluster1
info: Applying configuration version '1338798215'
notice: /Stage[main]/Cron[update mirror]/hour: hour changed '18' to '14'
notice: Finished catalog run in 4.71 seconds
Vemos que cambiar el valor de 18 a 14, siendo 14 el valor aleatorio que ha obtenido del cliente. Si ahora se ejecuta en otro nodo, veremos que el valor es 22, es decir, el valor aleatorio de fqdn_rand(23).
shell> puppetd agent --test
info: Caching catalog for mirror.cluster2
info: Applying configuration version '1338798215'
notice: /Stage[main]/Cron[update mirror]/hour: hour changed '18' to '22'
notice: Finished catalog run in 4.26 seconds
Y con esto conseguimos aleatorizar los tiempos de ejecución de puppet.
Leer más