Introducción

Este post va a ser un breve esquema de como poner en marcha una arquitectura cliente/servidor con Puppet. Va a ser solo unas pinceladas para información más en detalle tenemos la web de puppet o es este libro de James Loope publicado en o’relly.
¿Qué es Puppet?
Puppet es, en poca palabras, un sistema de gestión de la configuración. Lo que nos permite es gestionar los ficheros, configuraciones, software instalado, etc de N máquinas (unix o windows) de una manera similar a como programarÃamos. En puppet programamos «manifiestos» que declaran como será la configuración de un servicio, etc.
Es algo realmente útil cuando tenemos varias máquinas y queremos poder gestionarlas de manera centralizada, distribuyendo cambios de configuración entre ellas. Es indispensable en entornos de tipo cloud donde creamos nuevas máquinas y queremos que estas estén listas para funcionar (con una configuración de servidor web, por ejemplo).
¿Cómo funciona?
Aunque puppet se puede usar de manera aislada en una sola máquina (toda la docu de iniciación que encontré al principio describÃa este uso) su verdadera potencia viene cuando tenemos un puppet maestro y varios puppet cliente (agentes) que consiguen los manifiestos de configuración del maestro.
http://docs.puppetlabs.com/guides/installation.html#debian-and-ubuntu
http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-debian-and-ubuntu
Instalación del maestro
Instalamos el repo de puppetlabs para tener las últimas versiones:
wget http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -c -s`.deb
sudo dpkg -i puppetlabs-release-`lsb_release -c -s`.deb
sudo apt-get update
Instalamos el maestro:
sudo apt-get install puppetmaster
A que no ha dolido? 😀
Ahora hay que editar un par de ficheros para que nuestro maestro esté en marcha. Vamos a crear un par de manifiestos necesarios para que funcione el maestro. Por defecto puppet master va a leer el manifiesto en el fichero site.pp, pero para se un poco ordenados en este site.pp vamos a decirle que cargue el manifiesto donde definidos todos los agentes y un par de opciones más:
# fichero /etc/puppet/manifests/site.pp
import "nodes"
filebucket { main: server => "masterpuppet.mired.lan" }
# defaults
File { backup => main }
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }
Ahora debemos crear el manifiesto nodes.pp donde le diremos como configurar cada nodo. De momento solo vamos a crear un nodo «default» el cual se encargar de configurar ntp en el nodo.
#fichero /etc/puppet/manifests/nodes.pp
node base {
include ntp
}
node 'clientepuppet.mired.lan' inherits base {
}
Ya tenemos el maestro listo. Para probarlo vamos a instalar un módulo que nos creará la clase ntp y asà probaremos desde un agente. Instalar
cd /etc/puppet/modules
puppet module install puppetlabs-ntp
Instalación del nodo
Â
Si tenemos una ubuntu medio actual (12.04 o superior) instalamos desde el repositorio de la propia Ubuntu, sino usamos el mismo sistema para instalar el repo de puppetlabs que hemos visto para el maestro.
Instalamos puppet:
sudo apt-get install puppet
Lanzamos en agente contra el server:
sudo puppet agent --test --server masterpuppet.mired.lan
Fallara por la falta de firma del cert:
info: Creating a new SSL key for clientpuppet.mired.lan
info: Caching certificate for ca
info: Creating a new SSL certificate request for clientpuppet.mired.lan
info: Certificate Request fingerprint (md5): 37:16:56:D5:15:09:E0:A0:DF:B5:73:CF:5A:76:45:54
Exiting; no certificate found and waitforcert is disabled
En el SERVER firmamos el cert del cluente
sudo puppet ca list
Miramos el que esta pendiente y lo firmamos
puppet ca sign clientpuppet.mired.lan
(se puede hacer que autofirme siempre y evitar este paso pero hay que ser consciente de los problemas de seguridad que implica ello).
Ya podemos volvemos al nodo cliente y volvemos a lanzar el agente de puppet.
En la docu de puppet tenemos una explicación de como funciona el agente vs master y un útil «trobleshoot»
http://docs.puppetlabs.com/learning/agent_master_basic.html
Y con eso tenemos lo básico. Ahora tendrÃamos que empezar a escribir manifiestos 🙂