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?

Foi útil?

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:

  1. 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 seu Vagrantfile por exemplo. config.vm.define "someothername".

  2. Pare o provisionamento da máquina:

    Crie um arquivo chamado action_provision no mesmo diretório que o id arquivo, defina seu conteúdo como: 1.5:{id} substituindo {id} com o id encontrado na etapa 1.

  3. 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 o private_key.pub em /home/vagrant/.ssh/authorized_keys.

Atualize com o mesmo problema hoje com o Vagrant 1.7.4:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top