lunes, 1 de junio de 2015

Puppet en Debian 7

¿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?


Funciona bajo la arquitectura cliente servidor. Por una lado tenemos el servidor, donde indicamos los elementos que queramos que posea el cliente. El servidor es un paquete llamado puppetmaster y su configuración se encuentra bajo el directorio /etc/puppet. También tenemos al cliente, el cual recibe las ordenes y peticiones del servidor. Por ejemplo, si deseamos instalar un paquete, o ejecutar algún comando en
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" }# defaultsFile { 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 disabled
En 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