Ejercicios - 353.4 Vagrant

Pregunta 1

¿Qué lenguaje utiliza el Vagrantfile para definir la configuración?

a) YAML b) JSON c) Ruby DSL d) HCL

Respuesta

c) Ruby DSL

El Vagrantfile usa Ruby DSL (Domain Specific Language). La configuración se define dentro de un bloque Vagrant.configure("2") do |config| ... end. Aunque es Ruby, no se requieren conocimientos profundos del lenguaje para escribir Vagrantfiles básicos.

Pregunta 2

¿Qué comando crea e inicia una máquina virtual definida en el Vagrantfile?

a) vagrant start b) vagrant create c) vagrant up d) vagrant init

Respuesta

c) vagrant up

vagrant up crea la VM (si no existe), la configura y la inicia. Si la VM ya existe pero está detenida, simplemente la inicia. vagrant init solo crea el Vagrantfile inicial. vagrant start no existe como comando.

Pregunta 3

¿Qué es un “box” en el contexto de Vagrant?

a) Un contenedor Docker b) Una imagen base preconfigurada que sirve como plantilla para crear VMs c) Un directorio de proyecto Vagrant d) Un plugin de Vagrant

Respuesta

b) Una imagen base preconfigurada que sirve como plantilla para crear VMs

Un box es una imagen de máquina virtual empaquetada que Vagrant usa como base para crear nuevas VMs. Los boxes se descargan de Vagrant Cloud (por ejemplo ubuntu/jammy64) y se almacenan localmente en ~/.vagrant.d/boxes/.

Pregunta 4

¿Qué comando ejecuta los provisioners en una VM que ya está en funcionamiento?

a) vagrant up --provision b) vagrant provision c) vagrant reload --provision d) Todas las anteriores son válidas

Respuesta

d) Todas las anteriores son válidas

vagrant provision ejecuta los provisioners en una VM en ejecución. vagrant up --provision los ejecuta al iniciar. vagrant reload --provision reinicia la VM y ejecuta los provisioners. Todos logran ejecutar los provisioners, pero en contextos diferentes.

Pregunta 5

¿Cuál es el provider por defecto de Vagrant?

a) Libvirt b) Docker c) VirtualBox d) Hyper-V

Respuesta

c) VirtualBox

VirtualBox es el provider por defecto de Vagrant. Para usar otros providers como libvirt, se necesita instalar el plugin correspondiente (vagrant plugin install vagrant-libvirt) y especificarlo con vagrant up --provider=libvirt.

Pregunta 6

¿Cómo se define una red privada con IP estática en el Vagrantfile?

a) config.vm.network "host_only", ip: "192.168.56.10" b) config.vm.network "private_network", ip: "192.168.56.10" c) config.vm.ip = "192.168.56.10" d) config.vm.network "static", address: "192.168.56.10"

Respuesta

b) config.vm.network "private_network", ip: "192.168.56.10"

private_network crea una red host-only donde la VM es accesible desde el host por la IP especificada. public_network crea una red bridge. forwarded_port redirige puertos específicos.

Pregunta 7

¿Cómo se define un entorno multi-máquina en el Vagrantfile?

a) Creando múltiples Vagrantfiles b) Usando config.vm.define "nombre" do |nombre| ... end c) Usando config.vm.multi = true d) Usando config.cluster.add "nombre"

Respuesta

b) Usando config.vm.define "nombre" do |nombre| ... end

Cada VM se define con un bloque config.vm.define con un nombre único. Esto permite definir múltiples VMs con diferentes configuraciones en un solo Vagrantfile. Los comandos vagrant aceptan el nombre como argumento (ej. vagrant ssh web).

Pregunta 8

¿Qué comando de Vagrant crea un snapshot de la VM actual?

a) vagrant snapshot create mi-snap b) vagrant snapshot save mi-snap c) vagrant save mi-snap d) vagrant checkpoint mi-snap

Respuesta

b) vagrant snapshot save mi-snap

vagrant snapshot save crea un snapshot con nombre. vagrant snapshot list los lista, vagrant snapshot restore restaura y vagrant snapshot delete elimina. También existen push y pop para gestionar snapshots como una pila.

Pregunta 9

¿Qué tipo de red Vagrant conecta la VM directamente a la red física del host mediante bridge?

a) private_network b) public_network c) bridged_network d) forwarded_port

Respuesta

b) public_network

public_network crea una interfaz bridge que conecta la VM directamente a la red física, obteniendo una IP de la misma red que el host. Se configura con config.vm.network "public_network", opcionalmente especificando la interfaz de bridge.

Pregunta 10

¿Cuál es la carpeta compartida por defecto entre el host y la VM en Vagrant?

a) El directorio home del usuario se monta en /home/vagrant b) El directorio del Vagrantfile se monta en /vagrant dentro de la VM c) No hay carpeta compartida por defecto d) /tmp del host se monta en /tmp de la VM

Respuesta

b) El directorio del Vagrantfile se monta en /vagrant dentro de la VM

Por defecto, Vagrant comparte el directorio donde se encuentra el Vagrantfile como /vagrant dentro de la VM. Esto permite acceder fácilmente a los archivos del proyecto desde la VM. Se puede desactivar con config.vm.synced_folder ".", "/vagrant", disabled: true.

Pregunta 11

¿Qué comando muestra el estado de todas las máquinas Vagrant en el sistema, independientemente del directorio actual?

a) vagrant status --all b) vagrant global-status c) vagrant list d) vagrant status --global

Respuesta

b) vagrant global-status

vagrant global-status muestra el estado de todas las VMs gestionadas por Vagrant en todo el sistema. A diferencia de vagrant status, que solo muestra las VMs del directorio actual, global-status no depende de la ubicación del Vagrantfile.

Pregunta 12

¿Qué provisioner de Vagrant ejecuta Ansible directamente dentro de la máquina virtual en lugar de desde el host?

a) ansible b) ansible_local c) ansible_guest d) ansible_remote

Respuesta

b) ansible_local

El provisioner ansible_local instala y ejecuta Ansible dentro de la VM guest, a diferencia de ansible que lo ejecuta desde el host. Es útil cuando Ansible no está instalado en el host (por ejemplo, en sistemas Windows).

Pregunta 13

¿Qué tipo de synced folder en Vagrant ofrece mejor rendimiento en sistemas Linux/macOS mediante exportaciones de red?

a) VirtualBox shared folders b) rsync c) NFS d) SMB

Respuesta

c) NFS

Las carpetas compartidas de tipo NFS (type: "nfs") ofrecen mejor rendimiento que las shared folders nativas de VirtualBox en Linux/macOS. Requieren que el host tenga un servidor NFS instalado y privilegios de root para configurar las exportaciones.

Pregunta 14

En un Vagrantfile multi-máquina, ¿cómo se conecta por SSH específicamente a la VM llamada “db”?

a) vagrant ssh --name db b) vagrant ssh db c) vagrant connect db d) vagrant ssh --machine db

Respuesta

b) vagrant ssh db

En entornos multi-máquina, los comandos Vagrant aceptan el nombre de la VM como argumento. vagrant ssh db conecta a la VM definida con config.vm.define "db". Sin especificar nombre, Vagrant opera sobre la primera VM definida o solicita aclaración.

Pregunta 15

¿Qué opción en el Vagrantfile permite crear linked clones en VirtualBox para ahorrar espacio en disco?

a) vb.clone = true b) vb.linked_clone = true c) vb.thin_provision = true d) vb.copy_on_write = true

Respuesta

b) vb.linked_clone = true

vb.linked_clone = true dentro del bloque del provider VirtualBox crea clones vinculados en lugar de copias completas del disco. Esto reduce significativamente el espacio en disco y el tiempo de creación de las VMs.

Pregunta 16

¿Qué comando de Vagrant suspende la VM guardando su estado en memoria a disco?

a) vagrant pause b) vagrant save c) vagrant suspend d) vagrant freeze

Respuesta

c) vagrant suspend

vagrant suspend guarda el estado completo de la VM en disco (similar a hibernar). vagrant resume la reanuda desde ese estado. A diferencia de vagrant halt (apagado limpio), suspend preserva el estado exacto de la memoria.

Pregunta 17

¿Qué plugin es necesario instalar para utilizar libvirt como provider de Vagrant?

a) vagrant-kvm b) vagrant-libvirt c) vagrant-qemu d) vagrant-virtmanager

Respuesta

b) vagrant-libvirt

El plugin vagrant-libvirt se instala con vagrant plugin install vagrant-libvirt y permite usar QEMU/KVM a través de libvirt como backend de virtualización. Una vez instalado, se usa con vagrant up --provider=libvirt.

Pregunta 18

¿Qué versión de configuración del Vagrantfile es la actual y recomendada?

a) Vagrant.configure("1") b) Vagrant.configure("2") c) Vagrant.configure("3") d) Vagrant.configure("latest")

Respuesta

b) Vagrant.configure("2")

La versión “2” de la configuración del Vagrantfile es la actual y la utilizada desde Vagrant 1.1+. La versión “1” es obsoleta y ya no se recomienda. El número de versión se pasa como argumento al método Vagrant.configure.

Pregunta 19

¿Qué opción del Vagrantfile configura una redirección de puertos del puerto 80 del guest al puerto 8080 del host con corrección automática de conflictos?

a) config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true b) config.vm.network "port_forward", from: 80, to: 8080 c) config.vm.forward_port 80, 8080 d) config.vm.network "nat", guest: 80, host: 8080

Respuesta

a) config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true

La opción auto_correct: true permite que Vagrant elija automáticamente otro puerto del host si el 8080 ya está en uso. Esto evita fallos al iniciar múltiples VMs que redirigen al mismo puerto.

Pregunta 20

¿Qué ocurre cuando se ejecuta vagrant reload --provision en una VM en ejecución?

a) Solo ejecuta los provisioners sin reiniciar b) Destruye la VM y la recrea desde cero c) Reinicia la VM y luego ejecuta los provisioners d) Actualiza el box y reinicia la VM

Respuesta

c) Reinicia la VM y luego ejecuta los provisioners

vagrant reload --provision equivale a vagrant halt seguido de vagrant up --provision. Reinicia la VM aplicando cambios del Vagrantfile (como configuración de red o hardware) y después vuelve a ejecutar los provisioners.

Pregunta 21

¿Qué comando inicializa un directorio de proyecto Vagrant creando un Vagrantfile con el box ubuntu/jammy64?

Respuesta

vagrant init ubuntu/jammy64

El comando vagrant init crea un nuevo Vagrantfile en el directorio actual. Al especificar un nombre de box como argumento, el Vagrantfile generado ya incluye config.vm.box = "ubuntu/jammy64".

Pregunta 22

¿Qué comando destruye una VM de Vagrant sin pedir confirmación?

Respuesta

vagrant destroy -f

El flag -f o --force omite la confirmación interactiva al destruir una VM. Sin este flag, Vagrant solicita confirmación antes de eliminar la máquina virtual y sus discos asociados.

Pregunta 23

¿Qué comando instala un plugin de Vagrant, por ejemplo vagrant-libvirt?

Respuesta

vagrant plugin install vagrant-libvirt

El comando vagrant plugin install descarga e instala plugins desde RubyGems. Los plugins extienden la funcionalidad de Vagrant, como soporte para providers adicionales (libvirt, VMware) o funcionalidades extras.

Pregunta 24

¿Qué comando lista todas las boxes de Vagrant instaladas localmente?

Respuesta

vagrant box list

vagrant box list muestra todas las boxes descargadas y almacenadas localmente en ~/.vagrant.d/boxes/, incluyendo el nombre, la versión y el provider de cada box.

Pregunta 25

¿Qué comando crea un snapshot llamado “pre-upgrade” de la VM Vagrant actual?

Respuesta

vagrant snapshot save pre-upgrade

El comando vagrant snapshot save crea un snapshot con nombre de la VM actual. Para restaurarlo se usa vagrant snapshot restore pre-upgrade y para eliminarlo vagrant snapshot delete pre-upgrade.