En este tutorial, aprenderás cómo desplegar múltiples máquinas virtuales utilizando Vagrant, una herramienta para la creación y gestión de entornos de desarrollo virtualizados. Utilizaremos un script Bash para automatizar el proceso de configuración y despliegue de las máquinas virtuales. Además, te mostraré cómo listar, detener, iniciar, acceder y eliminar estas máquinas una vez desplegadas.
El Script Bash
El script Bash que utilizaremos automatiza la instalación de VirtualBox y Vagrant, crea un directorio de proyecto, inicializa un archivo de configuración Vagrantfile y despliega las máquinas virtuales Debian.
#!/bin/bash
# Función para verificar si un comando existe
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Función para detectar la interfaz de red activa con una dirección IP configurada
detect_active_interface() {
active_interface=$(ip -o -4 addr show up | awk '{print $2,$4}' | grep -vE 'lo|docker' | awk '{print $1}')
echo "$active_interface"
}
# Instalar VirtualBox
if ! command_exists virtualbox; then
echo "Instalando VirtualBox..."
echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt update
sudo apt install -y linux-headers-$(uname -r) dkms
sudo apt install -y virtualbox-7.0
# Instalar VirtualBox Extension Pack
VER=$(curl -s https://download.virtualbox.org/virtualbox/LATEST.TXT)
wget https://download.virtualbox.org/virtualbox/$VER/Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
rm Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
else
echo "VirtualBox ya está instalado."
fi
# Instalar Vagrant
if ! command_exists vagrant; then
echo "Instalando Vagrant..."
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update
sudo apt install -y vagrant
else
echo "Vagrant ya está instalado."
fi
# Crear el directorio de proyecto
PROJECT_DIR="debian_vms"
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR" || exit
# Inicializar Vagrant
if [ ! -f Vagrantfile ]; then
vagrant init debian/bookworm64
fi
# Detectar la interfaz de red activa con una dirección IP configurada
active_interface=$(detect_active_interface)
# Configurar el Vagrantfile
cat > Vagrantfile <<EOF
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
# Definir las máquinas virtuales
machines = {
"srvlwm01" => "192.168.1.100",
"srvlww01" => "192.168.1.101",
"srvlww02" => "192.168.1.102",
"srvlwd01" => "192.168.1.103",
"srvlwi01" => "192.168.1.104",
"srvlwi02" => "192.168.1.105"
}
machines.each do |name, ip|
config.vm.define name do |node|
node.vm.hostname = name
node.vm.network "public_network", ip: ip, bridge: "${active_interface}"
node.vm.provider "virtualbox" do |vb|
vb.name = name
vb.memory = "1024"
vb.cpus = 1
end
# Provisionar con un script de shell
node.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
end
end
end
EOF
# Levantar las máquinas virtuales
vagrant up
echo "Las máquinas virtuales Debian han sido desplegadas y configuradas."
Funciones Bash:
command_exists()
: Esta función verifica si un comando está disponible en el sistema. Utilizacommand -v
para buscar la ruta de un comando.detect_active_interface()
: Esta función detecta la interfaz de red activa con una dirección IP configurada. Utilizaip addr show up
para mostrar las interfaces de red activas ygrep
para filtrar las direcciones IP, excluyendo la interfaz de bucle local y Docker.
Instalación de VirtualBox:
- Verifica si VirtualBox está instalado utilizando la función
command_exists
. - Si VirtualBox no está instalado, agrega el repositorio de VirtualBox a
sources.list
, actualiza los paquetes, instala las cabeceras del kernel y DKMS (Dynamic Kernel Module Support), y finalmente instala VirtualBox. También instala el VirtualBox Extension Pack para agregar funcionalidades adicionales a VirtualBox.
Instalación de Vagrant:
- Similar a la instalación de VirtualBox, esta sección verifica la existencia de Vagrant utilizando
command_exists
. - Si Vagrant no está instalado, agrega la clave GPG de HashiCorp, agrega el repositorio de HashiCorp, actualiza los paquetes y finalmente instala Vagrant.
Creación del Directorio de Proyecto:
- Define una variable
PROJECT_DIR
con el nombre del directorio de proyecto. - Crea el directorio si no existe y navega hasta él.
Inicialización de Vagrant:
- Verifica si existe el archivo
Vagrantfile
en el directorio de proyecto. - Si no existe, inicializa un nuevo archivo
Vagrantfile
utilizando la imagen de Debiandebian/bookworm64
.
Configuración del Vagrantfile:
- Define la configuración de Vagrant utilizando Ruby DSL en el bloque
Vagrant.configure
. - Configura la caja (box) a utilizar, que es
debian/bookworm64
. - Define un conjunto de máquinas virtuales con nombres y direcciones IP asociadas.
- Para cada máquina virtual, configura el nombre, la red pública y las especificaciones de VirtualBox (nombre, memoria y CPUs).
- Además, se provisiona cada máquina con un script de shell que actualiza los paquetes e instala Apache.
Levantamiento de las Máquinas Virtuales:
- Inicia las máquinas virtuales utilizando el comando
vagrant up
.
Mensaje de Finalización:
- Imprime un mensaje indicando que las máquinas virtuales Debian han sido desplegadas y configuradas.
Gestión de las Máquinas Virtuales
Una vez desplegadas las máquinas virtuales, aquí te mostramos cómo gestionarlas:
Listar las Máquinas Virtuales
Para listar las máquinas virtuales desplegadas, utiliza el siguiente comando en el directorio del proyecto:
vagrant status
Parar una Máquina Virtual
Para detener una máquina virtual específica, ejecuta:
vagrant halt <nombre_de_la_maquina>
Iniciar una Máquina Virtual
Para iniciar una máquina virtual detenida, utiliza:
vagrant up <nombre_de_la_maquina>
Acceder a una Máquina Virtual
Para acceder a una máquina virtual mediante SSH, utiliza:
vagrant ssh <nombre_de_la_maquina>
Eliminar una Máquina Virtual
Para eliminar una máquina virtual y sus recursos asociados, ejecuta:
vagrant destroy <nombre_de_la_maquina>
:wq!