featured image

Hace dos años escribí sobre Vagrant. Desde entonces se ha convertido en mi herramienta favorita para el desarrollo de software. No solo permite construir una máquina a medida del entorno donde correrá la aplicación, también permite la construcción de un entorno de trabajo incluso publicando las máquinas en la red local. ¿Has pensado en tener tu propio CPD en tu red local?

Quizás sea un poco exagerado llamarlo CPD, pero en mi oficina dispongo de dos equipos, el portátil desde el que trabajo que tiene disco duro SSD y por lo tanto está algo limitado en espacio en disco y un equipo mayor con 4 discos en RAID sumando en total 2 TB.

Trabajando para varios clientes y cada cliente con un entorno diferente (Debian Wheezy, Debian Jessie, Ubuntu Trusty, CentOS 6, CentOS 7, ...) siempre queda la duda de si el software funcionará cuando pase de la máquina donde se ha creado al entorno de producción. No obstante, gracias a Vagrant, este impacto se minimiza y la mayoría de las veces desaparece.

Mis trabajos suelen involucrar diferentes máquinas, no solo una. Por lo que en mi trabajo diario tengo que levantar más de una máquina cada vez que trabajo para un cliente. El problema está en la limitación de mi portátil para esta tarea, por lo que recurro al servidor donde monto todas las máquinas virtuales que necesito, principalmente las máquinas de base de datos, o para la configuración del cluster, las segundas instancias o el resto del cluster. En mi portátil dejo solo la máquina donde voy modificando código.

¿Cómo construyo el entorno?

Afortunadamente, no es complicado. La configuración de multi-host de Vagrant nos permtie definir varias máquinas y sus características. Esto puede ser desde la dirección IP (si no disponemos de un servidor DHCP configurable en nuestra red) o tan solo la dirección MAC física (y así gestinamos las IPs desde el servidor DHCP).

Un ejemplo:

Vagrant.configure("2") do |config|
    config.vm.box = "altenwald/debian-7.9-puppet"

    config.vm.define "webserver" do |node_config|
        node_config.vm.network :forwarded_port,
            guest: 22,
            host: 2201,
            id: "ssh",
            auto_correct: true
        node_config.vm.host_name = "www.cliente.com"
        node_config.vm.network "private_network", ip: "192.168.1.100"
    end

    config.vm.define "database" do |node_config|
        node_config.vm.network :forwarded_port,
            guest: 22,
            host: 2202,
            id: "ssh",
            auto_correct: true
        node_config.vm.host_name = "db.cliente.com"
        node_config.vm.network "private_network", ip: "192.168.1.101"
    end
end

Cargando esta configuración en una máquina que tengas en red (y teniendo en cuenta que tu configuración de red es 192.168.1.0/24), al ejecutar vagrant up se agregarán esas dos máquinas con esas IPs en tu red.

Puedes manejarlas por separado, por ejemplo entrar en el servidor web:

vagrant ssh webserver

También puedes acceder a través de la IP de red y el usuario vagrant:

ssh vagrant@192.168.1.100

Puedes agregar a cada bloque o servidor la información adicional de configuración que quieras como el número de CPUs a emplear (CPUs o cores) o el tamaño de memoria RAM a emplear por la instancia. Puedes igualmente agregar más interfaces de red si quieres configurar una maqueta con simulación de diferentes redes y una máquina intermedia que haga de router entre ambas.

Conclusiones

Como ya dije en el primer artículo, Vagrant es una gran herramienta para el desarrollo no solo de software, sino también para la prueba sistemas de configuración, routers, clusters, pruebas de replicación, etc. Siempre que puedo lo recomiendo porque es la forma más rápida de tener un entorno de trabajo funcionando de programador a programador o de administrador de sistemas a administrador de sistemas.

¿Habías probado Vagrant anteriormente? ¿has encontrado dificultades en su uso? ¿necesitas alguna configuración específica para tu entorno de trabajo? ¡Comenta y te ayudaremos!