Anteriormente ya hemos hablado sobre Vagrant para crear máquinas virtuales con las que poder trabajar. También hemos comentado como tener recetas con chef para poder aprovisionar máquinas virtuales. Ahora viene el turno de como tener un sistema propio para disponer de maquinas virtuales y aprovisionarlas de todo el software necesario de manera sencilla y ágil.
Disponer de máquinas virtuales con configuraciones a medida no trae evita dolores de cabeza a la hora de instalar software o de probar desarrollos. Con Vagrant y chef podemos disf¡poner de máquinas idénticas a las que utilizamos en producción, idénticas en el sentido de versiones de software, así nos será más fácil saber si añadir una nueva librería será sencillo. Podremos asegurar que las librerías y frameworks que utilizamos son compatibles 🙂

Con la ayuda de plugins para Vagrant como ommibus podemos disponer de una serie de recetas de Chef con los que instalar aplicaciones como (nginx, apache, mysql, …) de manera sencilla además con Berkshelf o Librarian podremos disponer de un repositorio completo de recetas y utilizarlas como mejor nos convenga.
No me enrollo más y vamos al lío ¿Cómo asegurar la gestión de la configuración? ¿Cómo empezamos a montar nuestro entorno de máquinas virtuales con Vagrant y Chef-solo?
Entendiendo Vagrant y Chef
Seguramente os pase como a mí, hayáis leído 100 post sobre la necesidad de automatizar el proceso de crear maquinas, de tener clones de las maquinas de producción y de las 1001 ventajas que esto supone, pero creo que será bueno para todos parar un momento y entender todo este proceso de Chef-solo, Vagrant y sus plugins.
Problema 1: Quiero tener un entorno de preproducción idéntico al de producción (con las mismas versiones de programas, etc.)
Solución 1 Crear máquinas Virtuales utilizando Virtualbox y probar en dicha máquina el código que vallamos a subir a Producción. –> Utilizar Vagrant
Problema 2: Mantener el mismo software instalado en las máquinas de producción y preproducción sin tener que perder demasiado tiempo haciendo sudo apt-install XXX
Solución 2: Utilizar «algo» por ejemplo un script en bash o similar que al ejecutarlo instale todo ese software –> Utilizar Chef-solo
Problema 3: Hacer scripts en bash para instalar cosas es un poco infierno y mantener los scripts y tener personalizaciones (distintas contraseñas entre PRE y PRO…) hace todo un poco complicado
Solución 3: Utilizar algo que permita personalizar las recetas –> Utilizar Librarian
Entendiendo el lenguaje de chef
Antes de seguir hablando de recetas y demás vamos a definir un pequeño vocabulario común que no hará ma´s facil entender este post como el resto de post que encontremos sobre Chef:
- Node / Nodo: Es la maquina host donde se ejecutará chef.
- Recipe / Receta: Es un solo archivo de código Ruby que contiene los comandos a ejecutar en alguno de los nodos.
- Cookbook: Colección de recetas.
- Role / Rol: Configuración reutilizable para multeples nodos (base de datos, web,…).
- Attribute / Atributo: Variables que se pasan a través de chef y se utilizan en las recetas, por ejemplo a versión de NGINX.
Organizando el repositorio de chef
Existen muchas maneras de organizar el repositorio chef, podemos organizarlo:
- Carpetas autosuficientes: Una carpeta por máquina con todas las recetas dentro, por ejemplo sí tenemos una máquina donde tenemos instalado un WordPress como aquí tener dentro de esa carpeta todas las recetas para instalar Apcache, mysql, WordPress… podría ser una solución.
- Recetas compartidas: Si vamos a tener la misma receta personalizada en varias máquinas quizás sería interesante tener una carpeta llamada «cookbooks» donde tengamos nuestra personalización por ejemplo de apache recetas personalizadas y una carpeta por cada máquina.
Nosotros vamos a utilizar chef y ademas utilizaremos Knife y Librarian para mantener un orden en las recetas que vayamos haciendo 😉 Por tanto con solo un comando crearemos estas carpetas
Así que tendremos las siguientes carpetas:
- Boxes: Aquí tendremos las plantillas «Vagrantnizadas», es decir tendremos máquinas virtuales (box) que podemos utilizar con Vagrant, así no tendremos que descargarlas cada vez que necesitamos utilizarlas. Aquí tenemos una colección de boxes para utilizarlas en Vagrant.
- cookbooks: En este directorio tendremos las recetas «personalizadas», es decir, si tenemos una reglas específicas para nuestro Apache las definiremos en esta receta. Tendremos una carpeta por cada receta que queramos personalizar (dentro de esta carpeta las recetas chef tienen una organización específica)
- data_bag: En este directorio donde tendremos archivos JSON que utilizaremos en las recetab
Hemos elegido la opción de utilizar librarian, ya que está perfectamente acoplado a Vagrant al utilizar plugins y es bastante sencillo de utilizar
¿Por qué utilizar Librarian?
Existen unos cuantos «manejadores de recetas» y multitud de plugins que nos ayudan a tener las recetas chef bajo control, entre ellos los más populares son Librarian y Berkshlef.
Hemos elegido Librarian básicamente por su simplicidad a la hora de instalarlo y utilizarlo, hemos tenido algunos problemas al instalar Berkshelf (tanto la versión 2 como la versión 3beta).
Conclusiones
Hay multitud de herramientas para automatizar Chef, puppet, Ansible, y en los últimos tiempos existe un gran auge por automatizar el proceso de creación de máquinas. Una de las ventajas es que hay muchísimos plugins que nos facilitan la vida como por ejemplo https://puphpet.com ó http://rove.io que nos permite mediante una interfaz sencilla crear máquinas con distinto software instalado. Una de las desventajas que he visto es que de una versión a otra de una misma herramienta hay múltiples cambios que hacen que muchos de los plugins no terminen de funcionar, pero en el momento que encontremos una configuración de plugins con la que sentirnos cómodos todo será coser y cantar 🙂
¿Utilizas herramientas para automatizar la creación de máquinas? ¿Podrías darnos algún consejo? ¿Alguna alternativa a la configuración de carpetas? ¿Algún plugin que merezca la pena instalar?
Me has convencido, estoy probando con librarian en el mini servidor que tengo en casa (y por rizar el rizo, usando el proveedor «docker» 😛
Me gustaMe gusta
Muchas gracias por comentar. Genial que empieces a utilizar librarian, knife-solo y todo lo demás. Si te interesa docker, puedes echarle un ojo a esto https://dockerize.it
Me gustaMe gusta