Como associo um diretório de projeto Vagrant a uma VM VirtualBox existente?
-
12-11-2019 - |
Pergunta
De alguma forma, meu projeto Vagrant se desassociou de sua VM VirtualBox, de modo que quando eu vagrant up
O Vagrant importará a caixa base e criará uma nova máquina virtual.
Existe uma maneira de reassociar o projeto Vagrant à VM existente?Como o Vagrant associa internamente um Vagrantfile a um diretório VirtualBox VM?
Solução
AVISO: A solução abaixo funciona para o Vagrant 1.0.x, mas não Vagabundo 1.1+.
O Vagrant usa o arquivo ".vagrant" no mesmo diretório do seu "Vagrantfile" para rastrear o UUID da sua VM.Este arquivo não existirá se uma VM não existir.O formato do arquivo é JSON.Fica assim se existir uma única VM:
{
"active":{
"default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
}
}
default
é o nome da máquina virtual padrão (se você não estiver usando configurações de várias VMs).
Se a sua VM foi desassociada de alguma forma, o que você pode fazer é fazer VBoxManage list vms
que listará todas as VMs que o VirtualBox conhece por seu nome e UUID.Em seguida, crie manualmente um .vagrant
arquivo no mesmo diretório do seu Vagrantfile
e preencha o conteúdo corretamente.
Correr vagrant status
para garantir que o Vagrant tenha recebido as alterações adequadas.
Observação: Isso não é oficialmente suportado pelo Vagrant e o Vagrant pode alterar o formato do .vagrant
a qualquer momento.Mas isso é válido a partir do Vagrant 0.9.7 e será válido para o Vagrant 1.0.
Outras dicas
Para Vagabundo 1.6.3 faça o seguinte:
1) No diretório onde seu Vagrantfile está localizado, execute o comando
VBoxManage list vms
Você terá algo assim:
"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2) Vá para o seguinte caminho:
cd .vagrant/machines/default/virtualbox
3) Crie um arquivo chamado eu ia com o ID da sua VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4) Salve o arquivo e execute vagabundo
A solução com a versão superior é praticamente a mesma.
Mas primeiro você precisa iniciar o arquivo .vbox manualmente para que ele apareça em VBoxManage list vms
Então você pode verificar o .vagrant/machines/default/virtualbox/id
para verificar se o uuid é o correto.
Tive o problema hoje, meu .vagrant
estava faltando e descobri que havia mais algumas etapas do que simplesmente definir o id:
Defina o ID:
VBoxManage list vms
Encontre o ID e configure
{project-folder}/.vagrant/machines/default/virtualbox/id
.Observe que
default
pode ser diferente se definido em seuVagrantfile
por exemplo.config.vm.define "someothername"
.Pare o provisionamento da máquina:
Crie um arquivo chamado
action_provision
no mesmo diretório que oid
arquivo, defina seu conteúdo como:1.5:{id}
substituindo{id}
com o id encontrado na etapa 1.Configure uma nova chave pública/privada:
Vagrant usa uma chave privada armazenada em
.vagrant/machines/default/virtualbox/private_key
para ssh na máquina.Você precisará gerar um novo.ssh-keygen -t rsa
diga
private_key
.vagrant ssh
então copie oprivate_key.pub
em/home/vagrant/.ssh/authorized_keys
.
Atualize com o mesmo problema hoje com o Vagrant 1.7.4:
- tópico útil em https://github.com/mitchellh/vagrant/issues/1755e especialmente com os seguintes comandos:
Por exemplo, para emparelhar a caixa 'vip-quickstart_default_1431365185830_12124' com vagrant.
$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
Para configurações de múltiplas VMs, ficaria assim:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
Você pode obter os nomes das VMs no Vagrantfile usado para criar essas VMs.Procure esta linha:
config.vm.define :web do |web_config|
"web" é o nome da VM neste caso.
estou a usar Vagabundo 1.8.1 sobre OSX El Capitan
Minha VM não foi fechada corretamente quando meu computador foi reiniciado, então quando tentei vagrant up
estava sempre criando novas vm.Nenhuma solução aqui funcionou para mim.Mas o que funcionou foi uma variação de resposta de Inmmurillo
Então, em vez de criar .vagrant/machines/default/virtualbox/id
com base no ID da execução VBoxManage list vms
.tive que atualizar o id .vagrant/machines/local/virtual_box/id
Eu tenho um forro que essencialmente faz isso para mim:
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id
Isso pressupõe que a primeira caixa é aquela que preciso para começar a executar VBoxManage list vms
No Vagabundo 1.9.1:
Eu tinha uma VM no Virtual Box chamada 'Ubuntu 16.04.1', então empacotei-a como uma caixa vagrant com:
vagrant package --base "Ubuntu 16.04.1"
responde com...
==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box
Isto é modificado de Resposta do @Petecoop.
Correr vagrant halt
se você ainda não fechou a caixa.
Em seguida, liste suas caixas virtuais: VBoxManage list vms
Ele listará todas as suas caixas virtuais.Identifique a caixa para a qual deseja reverter e pegue o id entre as chaves: {}
.
Em seguida, edite o arquivo de identificação do projeto: sudo nano .vagrant/machines/default/virtualbox/id
(do diretório do projeto)
Substitua-o pelo ID que você copiou da lista de VBs.
Tentar vagrant reload
.
Se isso não funcionar e ficar preso na autorização SSH (onde tropecei), copie a chave pública insegura do vagabundo idiota.Substitua o conteúdo de /.vagrant/machines/default/virtualbox/private_key
.Faça backup do original, é claro: cp private_key private_key-bak
.
Então corra vagrant reload
.Ele dirá que identificou a chave insegura e criará uma nova.
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
Você deve estar tudo pronto.
Estou no macOS e descobri que remover os .locks das caixas resolveu meu problema.
Por algum motivo
vagrant halt
não removi esses bloqueios e depois de restaurar todas as minhas configurações em .vagrant/machine/default/virtualbox usando o timemachine, removendo os bloqueios, a máquina certa inicializou.
Resta apenas um pequeno problema: ele inicializou no grub, então tive que pressionar enter uma vez, não sei se isso vai permanecer, mas descobrirei em breve.
Estou executando o vagrant 1.7.4 e o virtualbox 5.0.2