Come associo una directory di progetto Vagrant a una VM VirtualBox esistente?


132

In qualche modo il mio progetto Vagrant si è dissociato dalla sua VirtualBox VM, così che quando I vagrant upVagrant importerà la base-box e creerà una nuova macchina virtuale.

C'è un modo per associare nuovamente il progetto Vagrant alla VM esistente? In che modo Vagrant associa internamente un Vagrantfile a una directory VM VirtualBox?

Risposte:


89

ATTENZIONE: la soluzione seguente funziona con Vagrant 1.0.x ma non Vagrant 1.1+.

Vagrant utilizza il file ".vagrant" nella stessa directory del "Vagrantfile" per tracciare l'UUID della VM. Questo file non esisterà se non esiste una macchina virtuale. Il formato del file è JSON. Sembra così se esiste una singola VM:

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default è il nome della macchina virtuale predefinita (se non si utilizzano configurazioni multi-VM).

Se la tua VM è in qualche modo dissociata, quello che puoi fare è VBoxManage list vmselencare ogni VM che VirtualBox conosce con il suo nome e UUID. Quindi creare manualmente un .vagrantfile nella stessa directory della tua Vagrantfilee compilare correttamente il contenuto.

Corri vagrant statusper assicurarti che Vagrant abbia acquisito le modifiche appropriate.

Nota: questo non è ufficialmente supportato da Vagrant e Vagrant può cambiare il formato .vagrantin qualsiasi momento. Ma questo è valido a partire da Vagrant 0.9.7 e sarà valido per Vagrant 1.0.


Eccezionale! Grazie. Ho avuto la sensazione che mancasse qualcosa.
jrdmcgr,

48
Per Vagrant 1.1, gli UUID sono memorizzati in un file specifico della macchina in .vagrant/machines/{name}/{provider}/id. In effetti, l'unica cosa che il file contiene è l'UUID.

2
Ho provato questo trucco ma lo stato vagabondo riporta semplicemente lo stato come non creato. Vagrant up crea quindi una nuova vm e funziona benissimo. Se cambio il file ID, questo viene segnalato come non creato, anche se lo cambio nuovamente nell'UUID della casella appena creata.
Reece Marsland,

4
Con Vagrant 1.1+, assicurati di non aggiungere una nuova riga alla fine dell'ID. Vedi github.com/mitchellh/vagrant/issues/1755 per i dettagli
Mads Mobæk,

1
Stavo cercando .vagrant nel mio profilo (Mac). Si noti che (almeno per me) era nella stessa cartella della cartella dei libri di cucina e di VagrantFile. (Vagrant versione 1.4.3)
allicarn

208

Per Vagrant 1.6.3 , procedi come segue:

1) Nella directory in cui si trova il tuo Vagrantfile, esegui il comando

VBoxManage list vms

Avrai qualcosa del genere:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2) Vai al seguente percorso:

cd .vagrant/machines/default/virtualbox

3) Crea un file chiamato id con l'ID della tua macchina virtuale xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) Salvare il file ed eseguire vagrant


8
Un buon modo per creare il idfile senza una nuova riga è echo -n '<your id here>' > id.
Xiong Chiamiov,

1
Funziona alla grande. Ma perché succede?
JohnnyQ,

Ha lavorato per me con Vagrant 1.7.2. Grazie!
Rafen,

1
Ha funzionato perfettamente.
Casey Robinson,

# test1 e test2 box ...for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
luismartingil

48

La soluzione con la versione superiore è la stessa.

Ma prima devi lanciare il file .vbox a mano in modo che appaia in VBoxManage list vms

Quindi puoi controllare .vagrant/machines/default/virtualbox/idper verificare che l'UUID sia quello giusto.


4
Inoltre, vale la pena notare che se si modifica il idfile, è necessario tenerlo su una sola riga. Per qualche ragione non piace newline alla fine (il mio editor di testo lo aggiunge di default, quindi ho avuto problemi).
Dan2552,

Ho riscontrato un problema con questo perché avevo rinominato la cartella in cui si trovava. Vagrant ha insistito sulla creazione di una nuova macchina virtuale con lo stesso nome della cartella, anziché utilizzare la macchina virtuale esistente. L'ho risolto creando un .vagrantfile nel formato 1.0 e lo ha aggiornato automaticamente. Non appena l'ho fatto, in realtà ha rinominato la vecchia macchina virtuale con il nome della nuova directory del progetto.
Giona,

2
Non sono sicuro di cosa abbia causato la disconnessione in cui il mio vagabondo / machine / default / virtualbox / id indicava l'ID macchina VirtualBox errato. Il file che ha aiutato era $ HOME / .VirtualBox / VirtualBox.xml. Ha una sezione MachineRegistry con gli UUID del computer VirtualBox associati ai nomi dei computer. Ad esempio <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox VM \ \ <machine-name> \ <machine-name> .vbox" />
arntg

14

Oggi ho .vagrantriscontrato il problema, mancava la mia cartella e ho scoperto che c'erano pochi passaggi in più rispetto alla semplice impostazione dell'ID:

  1. Imposta l'id:

    VBoxManage list vms
    

    Trova l'id e inseriscilo {project-folder}/.vagrant/machines/default/virtualbox/id.

    Nota che defaultpotrebbe essere diverso se impostato nel tuo Vagrantfileesempio config.vm.define "someothername".

  2. Interrompere il provisioning della macchina:

    Creare un file denominato action_provisionnella stessa iddirectory del file, impostarne il contenuto su: 1.5:{id}sostituendolo {id}con l'id trovato nel passaggio 1.

  3. Imposta una nuova chiave pubblica / privata:

    Vagrant utilizza una chiave privata memorizzata in .vagrant/machines/default/virtualbox/private_keyssh nella macchina. Dovrai generarne uno nuovo.

    ssh-keygen -t rsa
    

    chiamalo private_key.

    vagrant sshquindi copia private_key.pubin /home/vagrant/.ssh/authorized_keys.


è "authorized_keys" un file o una directory?
user2568374

è un file, se cerchi su di esso troverai un sacco di cose, è una cosa SSH standard
Petecoop,

Dato che stavo usando gli stessi tasti, non ho dovuto eseguire l'ultimo setp (terzo). Altrimenti, davvero ben spiegato e tutto perfetto.
Dazag,

Come fare il terzo passo su win10?
navono

9

Aggiorna con lo stesso problema oggi con Vagrant 1.7.4:

Ad esempio, per accoppiare la casella 'vip-quickstart_default_1431365185830_12124' a 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

6

Per le configurazioni multi-VM, sarebbe simile al seguente:

{
   "active":{
        "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
        "db":"13503bc5-76b8-4c26-95c4-32435b372212"
   }
}

È possibile ottenere i nomi VM dal file Vagrant utilizzato per creare tali VM. Cerca questa linea:

config.vm.define :web do |web_config|

"web" è il nome della VM in questo caso.


E db è una VM predefinita ??
Robert,

1
Non penso che ci sia un valore predefinito qui, solo web e db. A seconda del Vagrantfile, esiste un ordine in cui vm viene creato per primo.
agwntr

5

Sto usando Vagrant 1.8.1 su OSX El Capitan

La mia VM non è stata chiusa correttamente al riavvio del computer, quindi quando ho provato vagrant up creava sempre una nuova VM. Nessuna soluzione qui ha funzionato per me. Ma ciò che ha funzionato è stata una variazione della risposta di ingmmurillo

Quindi invece di creare .vagrant/machines/default/virtualbox/id base all'ID in esecuzione VBoxManage list vms. Ho dovuto aggiornare l'id in.vagrant/machines/local/virtual_box/id

Ho una fodera che essenzialmente fa questo per me:

echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id

Ciò presuppone che la prima casella sia quella di cui ho bisogno per iniziare a correre VBoxManage list vms


4

Questo è stato modificato dalla risposta di @ Petecoop .

Esegui vagrant haltse non hai ancora chiuso la finestra.

Quindi elenca le tue virtual box: VBoxManage list vms

Elencherà tutte le tue virtualbox. Identificare la casella che si desidera ripristinare e afferrare l'id tra le parentesi graffe: {}.

Quindi modificare il file ID del progetto: sudo nano .vagrant/machines/default/virtualbox/id(dalla directory del progetto)

Sostituiscilo con l'id che hai copiato dall'elenco dei VB.

Prova vagrant reload.

Se ciò non funziona e viene bloccato dall'autorizzazione SSH (dove sono inciampato), copia la chiave pubblica non sicura dal git vagabondo . Sostituisci il contenuto di /.vagrant/machines/default/virtualbox/private_key. Backup l'originale del corso: cp private_key private_key-bak.

Quindi corri vagrant reload. Dirà che ha identificato la chiave non sicura e ne creerà una nuova.

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!

Dovresti essere pronto.


3

In Vagrant 1.9.1:

Avevo una VM in Virtual Box chiamata 'Ubuntu 16.04.1', quindi l'ho impacchettata come una scatola vagabonda con:

vagrant package --base "Ubuntu 16.04.1"

risponde con ...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

0

Sono su macos e ho scoperto che rimuovere i .locks sulle scatole ha risolto il mio problema.

Per qualche ragione

vagrant halt

non ha rimosso questi blocchi, e dopo aver ripristinato tutte le mie impostazioni in .vagrant / machine / default / virtualbox usando timemachine, rimuovendo i blocchi, la macchina giusta si è avviata.

Rimane solo 1 piccolo problema, si è avviato in grub, quindi ho dovuto premere Invio una volta, non so se questo rimane, ma lo scoprirò abbastanza presto.

Sto eseguendo vagrant 1.7.4 e virtualbox 5.0.2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.