Sincronizar los módulos de un servidor puppet en otro | Algo de Linux

miércoles, 18 de mayo de 2016

Sincronizar los módulos de un servidor puppet en otro

Es muy sencillo y verdaderamente útil sincronizar el contenido de un directorio entre el servidor puppet y clientes. 

El caso más claro es aquél en que tenemos un servidor puppet que debe distribuir módulos a otros servidores puppet, como puede ocurrir en los CPR's, donde es interesante que el servidor del CPR suministre módulos puppet a los servidores de colegios; o, el caso de la sección de administración de sistemas, donde hay un servidor que distribuye módulos puppet a los servidores de todos los centros.

Distribuir los módulos es tan sencillo como crear un módulo que contenga la siguiente clase:
class modulesync {
   file { '/etc/puppet/modules':
      ensure  => directory,
      source  => 'puppet:///modules/modulesync/modules',
      owner   => puppet,
      group   => puppet,
      mode    =>  0755,
      recurse => true,   # entrar en subdirectorios
      replace => true,   # reemplazar ficheros que ya existan
      purge   => false,  # no eliminar ficheros que no tengamos
      links   => follow, # seguir enlaces y modificar el objetivo del link
      force   => false
   }
}
Si os fijáis en los dos atributos que he resaltado en color amarillo, le estamos diciendo a puppet que reemplace el contenido del directorio modules y todo su contenido (recurse => true) y que reemplace los ficheros que ya existan (replace => true). Ésta última opción es la opción por defecto, es decir, que no habría que especificarla expresamente. 

Podríamos utilizar este módulo en servidores puppet de CPR's para distribuir módulos a servidores de colegios. Ahora bien,  si la sección de administración de sistemas distribuye módulos a todos los centros, tanto de primaria como de secundaria, no podremos gestionar el recurso /etc/puppet/modules porque ya lo gestionan ellos. En ese caso, es preferible que nos distribuyan los módulos utilizando la opción replace => false para que los administradores podamos modificar los módulos que nos distribuyen.
class modulesync {
   file { '/etc/puppet/modules':
      ensure  => directory,
      source  => 'puppet:///modules/modulesync/modules',
      owner   => puppet,
      group   => puppet,
      mode    =>  0755,
      recurse => true,   # entrar en subdirectorios
      replace => false,  # no reemplazar ficheros que ya existan
      purge   => false,  # no eliminar ficheros que no tengamos
      links   => follow, # seguir enlaces y modificar el objetivo del link
      force   => false
   }
}
Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: