Ya hablé en el pasado sobre Puphpet, una herramienta web que genera manifiestos de Puppet y de Vagrant de forma rápida y sencilla.
Llevo tiempo utilizándolo para configurar mis máquinas virtuales de desarrollo junto a Vagrant, pero siempre estaba un poco con la mosca detrás de la oreja por el hecho de no poder utilizarlo también en producción.
Así que el otro día me decidí a echar un ojo al código fuente de Puphpet y ver si podía utilizar solo la parte generada de Puppet, y olvidarme de la parte de Vagrant.
Resulta que para hacer su magia, Puphpet tan solo le dice a Vagrant que ejecute unos scripts de bash. Así que pensé, ¿qué pasa si los ejecuto yo manualmente en producción? Los scripts solo se encargaban de instalar puppet, curl y alguna librería más, así que no debía de haber mucho problema. Después de hacer esto, tan solo le diría a puppet que leyese el manifiesto generado por Puphpet y listo. Mi plan sonaba bien, así que me propuse a intentarlo.
Para asegurarme de que nada fallaba, coloqué los archivos generados por Puphpet en el mismo sitio que cuando Vagrant los utiliza, es decir /vagrant. Entré en mi servidor de producción y subí los archivos de forma que quedaron así:
Una vez que tenía todo en su sitio, tan solo me quedaba ejecutar los scripts en el mismo orden que Vagrant lo hace. Acordaos de dar permisos de ejecución a esos ficheros. El orden es el siguiente:
chmod +x /vagrant/puphpet/shell/*.sh sudo ./vagrant/puphpet/shell/initial-setup.sh /vagrant/puphpet sudo ./vagrant/puphpet/shell/update-puppet.sh sudo ./vagrant/puphpet/shell/r10k.sh
Esto instalará todas las dependencias necesarias para que podamos empezar a utilizar puppet en producción. Así que una vez finalizado, solo queda decirle a puppet que aplique los cambios del manifiesto.
sudo puppet apply --debug --verbose --hiera_config /vagrant/puphpet/puppet/hiera.yaml --parser future /vagrant/puphpet/puppet/manifest.pp
Este comando hará todo lo que hemos pedido en el manifiesto. Para asegurarnos de que todo sigue en orden en el servidor, podemos crear un cron que lo ejecute cada cierto tiempo, o tan solo ejecutarlo manualmente cuando añadimos o borramos algo al manifiesto.
Así que con esto tengo la misma configuración en mi máquina virtual de desarrollo que en mi máquina de producción. Y es una configuración que he ido seleccionando a través de una cómoda interfaz web gracias a Puphpet. Épico.