Despliegue de Múltiples Máquinas Virtuales con Vagrant

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. Utiliza command -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. Utiliza ip addr show up para mostrar las interfaces de red activas y grep 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 Debian debian/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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *