¿QUÉ es Puppet?
Puppet es, palabras mas o palabras menos, un sistema de gestión centralizada de configuración. Permite gestionar los archivos, configuraciones, software instalado, etc. de un numero cualquiera de equipos (unix o windows) de una manera similar a como programar. En puppet programamos “manifiestos” que declaran como será la configuración de un servicio, etc.
Se convierte en 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?

determinadas computadoras configuraríamos el servidor con dicha orden y automáticamente en un intervalo de tiempo (30 minutos por defecto) recibirán y ejecutarán dichas órdenes.
Instalación del maestro: Serverpuppet.lan
Instalamos el repo de puppetlabs para tener las últimas versiones:
- wget http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -c -s`.deb
- dpkg -i puppetlabs-release-`lsb_release -c -s`.deb
- aptitude update
Instalamos el maestro:
- aptitude install puppetmaster
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:
- vi /etc/puppet/manifests/site.pp
import "nodes"
filebucket { main: server => "Serverpuppet.lan" }
# defaults
File { backup => main }
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }
package { "screen": ensure => "installed" }
package { "strace": ensure => "installed" }
package { "sudo": ensure => "installed" }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.
- vi /etc/puppet/manifests/nodes.pp
node base {
include ntp
}node 'Clientepuppet.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: Clientpuppet.lan
Si tenemos una Debian 7 (o superior) instalamos desde el repositorio de la propio de Debian, sino usamos el mismo sistema para instalar el repo de puppetlabs que hemos visto para el maestro.
Instalamos puppet:
- aptitude install puppet
Lanzamos en agente contra el server:
- puppet agent --test --server Masterpuppet.lan
Fallara por la falta de firma del cert:
info: Creating a new SSL key for clientpuppet.mired.laninfo: Caching certificate for cainfo: Creating a new SSL certificate request for clientpuppet.mired.laninfo: Certificate Request fingerprint (md5): 37:16:56:D5:15:09:E0:A0:DF:B5:73:CF:5A:76:45:54Exiting; no certificate found and waitforcert is disabledEn el SERVER firmamos el cert del cluente
- puppet cert list
Miramos el que esta pendiente y lo firmamos
- puppet cert sign clientpuppet.lan
(se puede hacer que autofirme siempre y evitar este paso pero hay que ser consciente de los problemas de seguridad que implica ello).
Volvemos al nodo cliente y volvemos a lanzar el agente de puppet. podemos chequear que en el cliente ha recibido la configuración declarada en el maestro, paquetes instalados en este caso (screen,strace,sudo).
- puppet agent --test --server Puppetmaster.lan
Nota: En caso de no contar con servidores DNS en la LAN apóyense en el archivo hosts
Referencias:
http://www.puppetcookbook.com/posts/install-multiple-packages.html
http://serverfault.com/questions/667804/installing-packages-with-dependencies-using-puppet
http://blog.etxea.net/index.php/2014/02/20/puppet-en-15-minutos
live free, or die
Linux user 548766