Error en sistema puppet por falta de espacio en el servidor | Algo de Linux

miércoles, 16 de octubre de 2013

Error en sistema puppet por falta de espacio en el servidor

Hoy he tenido que resolver un problema con puppet que me ha traído de cabeza durante gran parte de la mañana. Como muchos de los seguidores del blog son compañeros, os lo explico por si os sucede en alguna ocasión.

Al tratar de forzar manualmente la actualización de un cliente puppet tenía mensajes como éstos:

root@a02-pro:~# puppet agent --test
info: Creating a new SSL key for a02-pro.valledeljerte3
info: Caching certificate for ca
info: Caching certificate for a02-pro.valledeljerte3
err: Could not request certificate: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key
Exiting; failed to retrieve certificate and waitforcert is disabled

En principio, parecía un problema con una solución conocida:
  • Borramos el contenido del directorio /var/lib/puppet/ssl/ del cliente.
  • Borramos el certificado de la máquina cliente en el servidor: puppet cert clean a02-pro.valledeljerte3
  • Y volvemos a lanzar puppet agent --test en el cliente
Pero, no. Por más que lo hacía, volvía a obtener una y otra vez el mismo error.

Además, si ejecutaba  puppet cert list --all para mostrar los certificados en el servidor, veía un error como el siguiente:

err: Could not call list: header too long


La impresión que me daba era que no funcionaba la gestión de certificados, porque el problema afectaba a todas las máquinas que no tenían certificado. En cambio, las que sí lo tenían si no lo borraba, se actualizaban sin problemas.

Como hace días había tenido algún problemilla por falta de espacio en el directorio /var del servidor, empecé a buscar en esa dirección, además de Google, claro. Y encontré que en los siguientes directorios había archivos de certificados con cero bytes:
  • /var/lib/puppet/ssl/ca/requests
  • /var/lib/puppet/ssl/ca/signed
Después de borrar los archivos, reinicié apache2 (puesto que usamos puppet con passenger), volví a intentar la actualización manual de clientes y ahora sí funcionó. 

No obstante, hubo algún cliente que, aún así tampoco se actualizaba y era porque tenía también algún archivo con 0 bytes: /var/lib/puppet/state/state.yaml. Una vez borrado este archivo, pude actualizar el cliente sin problemas.

Supongo que el problema estaba en que el servidor puppet trataba de leer las peticiones de certificados, y como los archivos estaban vacíos, el sistema fallaba. Lo peor de todo ésto, es que no sólo fallaba la actualización de las máquinas cuyo archivo tenía 0 bytes. Fallaban todas.

Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: