Yo uso vagabundo para el desarrollo. Olvidé apagar algunas de las máquinas virtuales. Cuando salgo de mi máquina host, el proceso de apagado de Ubuntu parece bloquearse.
¿Podría haber una manera de escribir un cierre de todos los cuadros vagos con un poco de línea de comandos-fu? Algo como lo siguiente, pero algo que, bueno, funciona.
for f in $HOME/vagrant;
do;
cd $f
vagrant halt
done;
command-line
virtualbox
vagrant
Almiar
fuente
fuente
Respuestas:
Para un control de secuencias de comandos de máquinas de Virtual Box podemos hacer uso de los comandos VBoxManage :
Lista de máquinas en ejecución (devuelve nombre y UUID):
Deje de ejecutar máquinas virtuales "hibernando" (recomendado para evitar la pérdida de datos)
Apague las máquinas virtuales (no se recomienda porque podemos perder datos en el invitado)
Use ACPI en un sistema operativo invitado compatible con ACPI (preferible
poweroff
para el apagado correcto de los invitados)Ver también: Cómo cerrar de manera segura el SO huésped en VirtualBox usando la línea de comando
Actualización desde OP
Basado en esta respuesta correcta seleccionada a continuación, he agregado este script bash "
$HOME/bin/stop-vagrant.sh
". Así que ahora tengo algo que puede iniciar de forma segura una parada de todas las máquinas virtuales vagabundas que podría haber encendido pero olvidado en una sesión.Comando explicado:
vboxmanage list runningvms |
- obtiene una lista de todos los vms en ejecución en VirtualBoxsed -r 's/.*\{(.*)\}/\1/' |
- quita la cadena al número de identificaciónxargs -L1 -I {} VBoxManage controlvm {} savestate
- ejecuta el comando guardar estado en cada cuadro que está abierto.En
xargs
-L1
- toma una línea a la vez-I {}
- utiliza {} como marcador de posición para el siguiente comandofuente
-r
opción es exclusiva de GNU Sed.-E
lugar de-r
. Es la bandera para usar expresiones regulares extendidas.La otra respuesta es excelente para manejar Virtualbox, pero Vagrant presenta sus propios mecanismos para manejar máquinas virtuales, y como se mencionó en uno de los comentarios, admite más que solo VirtualBox, solo VMWare en este momento, ¡pero quién sabe más adelante!
Esto parece funcionar para mí:
Nota:
Esto funciona con las versiones de Vagrant posteriores a 1.6, para versiones anteriores, probablemente debería actualizar, pero si no puede, una de las otras opciones que se centra en Virtualbox puede ser mejor.
fuente
global-status
comando se introdujo en Vagrant 1.6 . Los usuarios de versiones anteriores de Vagrant, en particular aquellos que lo han instalado a través deapt-get
y aún pueden estar en 1.4.3, deberán actualizar su instalación de Vagrant antes de poder usar este comando.xargs
no soporta-r
, por lo tanto, se puede instalargxargs
a travésbrew
y utilizar en su lugar.Mi mecanismo para esto:
vagrant global-status | grep virtualbox | cut -c 1-9 | while read line; do echo $line; vagrant halt $line; done;
virtualbox
(filtra el texto de ayuda, se romperá si está utilizando otro proveedor)vagrant halt $line
deteniendo al vagabundo para esa identificación única globalEsto es mejor que el método Virtualbox anterior, porque también ejecutará cualquier mecanismo de apagado configurado vagamente.
fuente
sed
yawk
. ¡Gracias!vagrant suspend
lugar devagrant halt
guardar el estado y suspenderla para acelerarla.En caso de que otras personas lleguen a esta pregunta: para aquellos que usan VirtualBox, ya puede encargarse de esto, solo implica editar un archivo:
Lo bueno es que no es necesario editar / crear ningún cierre de sesión o
init.d
stript para ejecutar los comandos publicados en las otras respuestas. La desventaja es que esta solución es específica de VirtualBox.Probado en Ubuntu 14.10 con VirtualBox 4.3.18.
Todo el crédito va a esta publicación .
fuente
Combinando algunas de las otras respuestas, esto cerrará todos los cuadros vagabundos de virtualbox en ejecución:
fuente
Yo solo uso
vagrant halt
. Si lo ejecuta sin más argumentos, detiene todas las máquinas definidas enVagrantfile
.fuente
Si está escribiendo scripts para analizar comandos Vagrant, se recomienda analizar la salida amigable para la máquina (
--machine-readable
), que es más consistente.El formato es:
para que pueda importarlo como archivo CSV, ya que está separado por comas.
Con shell, probablemente sea más difícil de analizar, por ejemplo:
Ver: Vagabundo - Salida legible por máquina
Sin embargo, me resulta más fácil analizar la salida estándar, p. Ej.
Por cierto. Teóricamente, el
vagrant
comando debería aceptar una expresión regular para que la lista de máquinas virtuales se suspenda según esta publicación de GH , por ejemplo:pero no funciona y hay un error # 7221 que está pendiente para solucionarlo.
Entradas relacionadas a GitHub:
fuente
Esto puede o no funcionar para usted ;-) Funciona para mí
vagrant_halt_all.sh
fuente