Hoy traemos un artículo sobre provisión automática, unas pequeñas pinceladas sobre como podemos montar un laboratorio rápido en VirtualBox dónde probar configuraciones sobre nuestros sistemas Linux o levantar aplicaciones más complejas de forma automática. El ejercicio completo se hará sobre un entorno WINDOWS 10, por ser el más habitual, pero se puede hacer desde cualquier S.O.
Prerrequisitos:
Tener instalado en el ordenado Vagrant y VirtualBox, los enlaces a ambos son los siguientes:
¿Para que sirven estas dos herramientas?
La primera, y quizás la que no le suene a todo el mundo, es una herramienta que se encarga de comunicarse con diferentes hipervisores de virtualización y se encarga de levantar las máquinas que nosotros le indiquemos en el código que escribamos en el fichero “vagrant file”. La ventaja principal de todo esto es que el entorno lo vamos a codificar como código, eso hace que podamos levantarlo y destruirlo las veces que queramos sin que eso nos suponga más trabajo que ejecutar los comando de “vagrant up” y “vagrant destroy”.
Las imágenes de sistemas operativos que soporta Vagrant se pueden ver en el siguiente enlace:
https://app.vagrantup.com/boxes/search
Qué como veis, tiene soportadas una cantidad elevada de S.O. al igual que de hipervisores de virtualización.
La segunda herramienta es conocida por todos, es VirtuaBox, un software de virtualización que nos permite virtualizar máquinas dentro de nuestro host, muy útil para montar laboratorios, entornos de pruebas o tener un sistema operativo diferente al nuestro virtualizado para uso esporádico.
Una vez tenemos los prerrequisitos, entraremos en harina:
Esquema del entorno:
![](https://crossmind.technology/wp-content/uploads/2022/08/0002-entorno-1024x576.png)
Es un esquema sencillo, dónde vamos a crear 3 máquinas virtuales. Dos servidores web dónde de arranque sólo instalaremos un servidor web “apache” a modo de ejemplo y un firewall de software libre conocido como Endian-firewall. Este le conectaremos a una red privada con los servidores y a nuestro “Internet”, es decir, le conectaremos una patita a la red de casa para poder conectarnos a él emulando una red pública. Posteriormente configuraremos el firewall para publicar los servidores web a través de este.
El desglose de configuración de red sería el siguiente:
Máquina | Interfaz 1 | Interfaz 2 |
Web-Server-01 | Private: 192.168.88.101/24 – gw 192.168.88.100 | – |
Web-Server-02 | Private: 192.168.88.102/24 gw 192.168.88.100 | – |
Firewall01 | Private: 192.168.88.100/24 Gw – N/A | Bridge: 192.168.100.200/24 – gw 192.168.100.1 |
¿Cómo va a funcionar el conjunto?
La idea, es que el software Vagrant a través del “vagrant file” que vamos a codificar sea capaz de levantar toda la plataforma de máquinas virtuales sólo haciendo un “vagrant up”. El esquema a alto nivel del funcionamiento sería el siguiente:
![](https://crossmind.technology/wp-content/uploads/2022/08/0002-entorno-slide-02-1024x576.png)
¿Qué tenemos que codificar en el “vagrant file”?
Para levantar una máquina, tenemos que escribir lo siguiente en el vagrant file:
Vagrant.configure("2") do |config|
config.vm.define "Web-Server-01" do |web01|
web01.vm.network "private_network", ip: "192.168.88.101"
web01.vm.box = "ubuntu/trusty64"
web01.vm.provider "virtualbox" do |web01|
# Customize the amount of memory on the VM:
web01.memory = "2048"
web01.cpus= "2"
end
web01.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
route add default gateway 192.168.88.100
SHELL
end
end
Dónde tenemos varias secciones:
Una primera sección dónde configuramos a grandes rasgos la máquina virtual, véase la CPU, memoria, nº de interfaces…, y no menos importante, el sistema operativo, en nuestro caso (ubunt 22.10):
web01.vm.network "private_network", ip: "192.168.88.101"
web01.vm.box = "ubuntu/trusty64"
web01.vm.provider "virtualbox" do |web01|
# Customize the amount of memory on the VM:
web01.memory = "2048"
web01.cpus= "2"
Y una segunda sección más interesante dónde enviamos mediante la opción de provisión diferentes opciones, que pueden ir desde ejecutar una serie de comandos en bash a ejecutar aprovisionadores de configuración como son ansible o puppet y hacer cosas bastante complejas:
web01.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
route add default gateway 192.168.88.100
SHELL
El código completo para levantar el entorno se anexa en el siguiente fichero:
El resultado de la ejecución de todo esto puede verse en las siguientes imágenes:
Ejecutamos “vagrant up”
![](https://crossmind.technology/wp-content/uploads/2022/08/vagrantup.png)
Finalización del “vagrant up”:
![](https://crossmind.technology/wp-content/uploads/2022/08/vagrantup2.png)
Una vez provisionado el entorno, veremos que se han creado 3 máquinas virtuales en nuestro VirtualBox con las características que le indicamos en el “Vagrant file”:
![](https://crossmind.technology/wp-content/uploads/2022/08/entorno_funcionando.png)