Administrando nodos con Puppetrun

Este comando nos permite administrar todos los nodos desde un mismo servidor. El único requisito para que esto funcione es que el demonio "puppetd" esté levantado en todos los nodos que queramos administrar.

A continuación se explicará un ejemplo de configuración y ejecución de puppetrun.

Configuración de los nodos

1.- Para permitir el acceso al demonio puppetd tenemos que añadir la máquina que ejecutará puppetrun en el fichero "namespaceauth.conf" de cada nodo:

vi /etc/puppet/namespaceauth.conf
[fileserver]
allow server.dominio

[puppetmaster]
allow server.dominio

[puppetrunner]
allow server.dominio

Esto permitirá que el servidor "server.dominio" pueda ejecutar puppet en nuestra máquina.

Nota: debido a un BUG en algunas versiones se recomienda añadir el hostname exacto de la máquina que ejecutará puppetrun. No utilizar CNAME's y evitaremos problemas.

 

2.- Como último paso tenemos que levantar "puppetd" para que escuche en el puerto 8139. Además levantaremos el demonio en modo "--no-client" para evitar la ejecución automática que se realiza cada 30 minutos por defecto.

Editamos el fichero "puppet.conf" y añadimos el parámetro "listen=true":

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
pluginsync=true

[puppetmasterd]
templatedir=/var/lib/puppet/templates

[puppetd]
server=server.dominio
certname=cliente.dominio
daemonize=true
listen=true
report=true


Para que el demonio se levante en modo "--no-client" editamos el siguiente fichero:

vi /etc/default/puppet
# Defaults for puppet - sourced by /etc/init.d/puppet

# Start puppet on boot?
START=yes

# Startup options
DAEMON_OPTS="--no-client"


3.-  Ahora ya podemos levantar el demonio:

/etc/init.d/puppetd


Comprobamos que el puerto se ha levantado correctamente:

netstat -na|grep 8139
tcp        0      0 0.0.0.0:8139            0.0.0.0:*               LISTEN      


Ejecución de Puppetrun

Nos conectamos al servidor de Puppet y ejecutamos:

puppetrun --host cliente.dominio

Esto actualizará todas las clases que el cliente tenga de Puppet.

 

Si queremos especificar una clase ejecutamos:

puppetrun --host cliente.dominio -t basenode

Esto actualizará la clase "basenode" en "cliente.dominio".

Lanzar Puppet en todos los nodos

Puppetrun nos permite actualizar todos los nodos a la vez ejecutando:

puppetrun -a

Esto solo nos funcionará si hemos montado el puppetmaster con LDAP. Si este no es nuestro caso podemos ejecutarlo de la siguiente manera:

puppetca --list --all | awk '{ print $2 }' | xargs -I ’{}’ sudo puppetrun --host ’{}’


Detección de problemas

Si nos encontramos con problemas al ejecutar puppetrun contra un nodo, podemos levantar el demonio "puppetd" de la siguiente manera:

puppetd --no-daemonize --listen --verbose --no-client

Luego ejecutamos "puppetrun" desde nuestro servidor y en el cliente podremos debugar todo lo que ocurre en la comunicación.

Buen Articulo.


Saludos!!

En estos momentos me encuentro buscando soluciones para gestionar equipos Desktop Ubuntu.. ¿Recomiendas Puppet para este fin?

He visto que mucha gente lo usa y me parece mejor alternativa a CFengine que aparentemente es mas para servers.

Aun asi, hay alguna otra alternativa para gestionar Desktops? la idea es mantenerlos actualizados e instalar algunas aplicaciones, como un WSUS pero para Linux.

Y dentro del Tema de Puppet, muchas de las configuraciones se manejan por Classes, ¿Conoces algun buen recurso para crear algunas? La cosa es que veo que todos usan puppet pero no muestran algunas classes de ejemplo mas que la clasica de "sudoers" y cosas asi.

Seria bueno ver un tutorial mas a fondo, por lo pronto, gracias!!

twitter.com/wiredfixer