La Capa Inferior: Hipervisores, Lenguajes Nativos y el Rol de IaC como "Wrapper"

Antes de que una máquina virtual pueda ejecutar un script de aprovisionamiento por SSH, primero debe existir en el hipervisor, y su sistema operativo debe ser capaz de arrancar. Para entender cómo se automatiza esto, hay que desmontar un mito: las interfaces gráficas de los hipervisores son solo un adorno.

Cualquier acción que realizas haciendo clic en la interfaz de VMware, VirtualBox o Proxmox, por detrás se traduce en la ejecución de comandos en un lenguaje de programación o CLI nativo propio de ese hipervisor, o en peticiones a su API interna.

Las herramientas de Infraestructura como Código (IaC) orientadas a la creación de infraestructura (como Packer o los providers de Terraform/OpenTofu) no reinventan la rueda: son "wrappers" (envoltorios) de alto nivel. Lo que hacen es exponer una API limpia (a través de archivos de configuración declarativos como YAML o HCL) que, al ejecutarse, traduce tus deseos en el lenguaje nativo del hipervisor para controlar la creación de la máquina, y posteriormente "envuelve" scripts de Bash/PowerShell para el aprovisionamiento.

1. El Lenguaje Oculto de los Hipervisores (Ejemplos Reales)

Para entender qué hace un wrapper de IaC, primero debemos ver qué comandos nativos tendría que ejecutar un humano en la terminal del hipervisor para crear una máquina virtual básica:

Cuando utilizas un provider de Terraform para Proxmox o VirtualBox, tú escribes código limpio en HCL, pero el provider (escrito normalmente en Go) traduce ese código en secuencias de comandos qm o peticiones HTTP a la API de Proxmox.

2. ¿Cómo se afronta la instalación del Sistema Operativo?

Una vez que el wrapper ha creado el "cascarón" (la máquina virtual vacía) y ha montado la ISO, se presentan dos estrategias tecnológicas para instalar el sistema operativo:

Estrategia A: Uso de Imágenes Preinstaladas (Tecnologías basadas en Clones/Templates)

Muchas tecnologías de IaC evitan tener que instalar el sistema operativo desde cero utilizando imágenes que ya han pasado por ese proceso y están "congeladas".

Estrategia B: Instalación desde ISO Oficial (Simulación de Teclado)

Cuando necesitas compilar tu propia imagen corporativa desde una ISO limpia y oficial (por ejemplo, usando Packer), no puedes usar cloud-init ni imágenes prefabricadas. Necesitas que el instalador de la ISO lea tu archivo de automatización (preseed.cfg para Debian o user-data para Ubuntu Autoinstall).

¿El problema? Al arrancar una ISO limpia, el instalador se detiene en un menú de arranque interactivo (GRUB o ISOLINUX) esperando a que un humano pulse teclas para elegir el idioma o pasarle parámetros.

Para solucionar esto, los lenguajes de los hipervisores incluyen funciones para inyectar pulsaciones de teclado de forma virtual (Scancodes). Las herramientas de IaC aprovechan esto levantando un servidor web temporal donde guardan el archivo preseed.cfg, y luego "teclean" en la máquina virtual la dirección de red de ese archivo.

3. Ejemplo Práctico: El "Wrapper" Packer simulando el teclado