Eu uso vagabundo para o desenvolvimento. Eu esqueço de desligar algumas das VMs. Quando vou sair da minha máquina host, o processo de desligamento do Ubuntu parece travar.
Pode haver uma maneira de criar um script para fechar todas as caixas vagabundas com um pouco de comando-fu? Algo como o seguinte, mas algo que, bem, funciona.
for f in $HOME/vagrant;
do;
cd $f
vagrant halt
done;
Respostas:
Para um controle programável das máquinas do Virtual Box, podemos usar os comandos VBoxManage :
Listar máquinas em execução (retorna nome e UUID):
Pare de executar VMs "hibernando" elas (recomendado para evitar a perda de dados)
Poweroff executando VMs (não recomendado, pois podemos perder dados no convidado)
Use a ACPI em um sistema operacional convidado compatível com a ACPI (preferível
poweroff
para o desligamento normal dos convidados)Consulte também: Como encerrar com segurança o SO convidado no VirtualBox usando a linha de comando
Atualização do OP
Com base nesta resposta correta selecionada abaixo, adicionamos este script bash "
$HOME/bin/stop-vagrant.sh
". Portanto, agora eu tenho algo que pode iniciar com segurança uma parada de todas as VMs vagantes que eu poderia ter ativado e ainda esquecido em uma sessão.Comando explicado:
vboxmanage list runningvms |
- obtém uma lista de todos os vms em execução no VirtualBoxsed -r 's/.*\{(.*)\}/\1/' |
- reduz a string até o número de identificaçãoxargs -L1 -I {} VBoxManage controlvm {} savestate
- executa o comando salvar estado em cada caixa que está aberta.Em
xargs
-L1
- pegue uma linha de cada vez-I {}
- usa {} como um espaço reservado para o próximo comandofonte
-r
opção é exclusiva do GNU Sed.-E
vez de-r
. É o sinalizador para usar expressões regulares estendidas.A outra resposta é ótima para manipular o Virtualbox, mas o Vagrant possui seus próprios mecanismos para manipular as Máquinas Virtuais e, como foi mencionado em um dos comentários, ele suporta mais do que apenas o VirtualBox, apenas o VMWare no momento, mas quem sabe depois!
Isso parece funcionar para mim:
Nota:
Isso funciona com as versões do Vagrant após a versão 1.6. Para versões mais antigas, você provavelmente deve atualizar, mas se não puder, uma das outras opções focadas no Virtualbox pode ser melhor.
fonte
global-status
comando foi introduzido no Vagrant 1.6 . Os usuários de versões mais antigas do Vagrant, particularmente aqueles que o instalaram viaapt-get
e ainda podem estar na 1.4.3, precisarão atualizar a instalação do Vagrant antes de poder usar este comando.xargs
não suporta-r
, portanto você pode instalargxargs
viabrew
e usá-lo.Meu mecanismo para isso:
vagrant global-status | grep virtualbox | cut -c 1-9 | while read line; do echo $line; vagrant halt $line; done;
virtualbox
( filtra o texto de ajuda, será interrompido se você estiver usando outro provedor)vagrant halt $line
interrompendo o vagabundo para esse ID exclusivo globalIsso é melhor do que o método Virtualbox acima, porque também executará mecanismos de desligamento vagrantes.
fonte
sed
eawk
. Obrigado!vagrant suspend
vez devagrant halt
salvar o estado e suspendê-lo para uma operação mais rápida e mais rápida.Caso outras pessoas cheguem a esta pergunta: Para quem usa o VirtualBox, ele já pode resolver isso, envolve apenas a edição de um arquivo:
A vantagem é que não é necessário editar / criar nenhum logout ou
init.d
stript para executar os comandos publicados nas outras respostas. A desvantagem é que esta solução é específica do VirtualBox.Testado no Ubuntu 14.10 com VirtualBox 4.3.18.
Todo o crédito vai para este post .
fonte
Combinando algumas das outras respostas, isso fechará todas as caixas vagrant do virtualbox em execução:
fonte
Eu apenas uso
vagrant halt
. Se você executá-lo sem mais argumentos, ele interromperá todas as máquinas definidas no arquivoVagrantfile
.fonte
Se você estiver escrevendo scripts para analisar comandos do Vagrant, é recomendável analisar a saída amigável à máquina (
--machine-readable
), que é mais consistente.O formato é:
para que você possa importá-lo como arquivo CSV, pois é separado por vírgula.
Com o shell, provavelmente é mais difícil de analisar, por exemplo:
Consulte: Vagrant - Saída legível por máquina
No entanto, acho mais fácil analisar a saída padrão, por exemplo,
Btw. Teoricamente, o
vagrant
comando deve aceitar uma expressão regular para a lista de VMs a serem suspensas conforme esta postagem do GH , por exemplo:mas não funciona e há um bug # 7221 pendente para corrigi-lo.
Bilhetes GitHub relacionados:
fonte
Isso pode ou não funcionar para você ;-) Funciona para mim
vagrant_halt_all.sh
fonte