Come posso associare una directory di progetto Vagrant con un VirtualBox VM esistente?
-
12-11-2019 - |
Domanda
In qualche modo il mio progetto vagabondo si è disassociato dal suo VirtualBox VM, in modo che quando vagrant up
Vorgant importerà la scatola di base e crea una nuova macchina virtuale.
C'è un modo per riassociare il progetto vagabondo con la VM esistente? In che modo Vagrant Internalmente associano un VagrantFile con una directory VM VirtualBox?
Soluzione
Avvertenza: La soluzione sottostante funziona per Vagrant 1.0.x ma non vagrant 1.1 +.
VagRant utilizza il file ".vagrant" nella stessa directory del tuo "VagrantFile" per tracciare l'UUID della tua VM. Questo file non esiste se un VM non esiste. Il formato del file è JSON. Sembra questo 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 il tuo VM ha in qualche modo dissociato, ciò che puoi fare è fare VBoxManage list vms
che elencherà ogni VM che VirtualBox sa per il suo nome e UUID. Quindi creare manualmente un file .vagrant
nella stessa directory del Vagrantfile
e compila correttamente il contenuto.
Eseguire vagrant status
per garantire che il vagabulto abbia raccolto le modifiche appropriate.
Nota: Non è ufficialmente supportato da VAGRANT e VAGRANT può cambiare il formato di .vagrant
in qualsiasi momento. Ma questo è valido come vagabondo 0.9.7 e sarà valido per VAGRANT 1.0.
Altri suggerimenti
per Vagrant 1.6.3 Fai quanto segue:
1) Nella directory in cui si trova il VAGRANTFile, eseguire 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) Creare un file chiamato ID con l'ID del tuo VM XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX
4) Salvare il file ed esegui Vangant Up
La soluzione con la versione superiore è uguale.
Ma prima è necessario avviare il file .vbox a mano in modo che appaia in VBoxManage list vms
Quindi è possibile controllare il .vagrant/machines/default/virtualbox/id
per verificare che l'UUID sia quello giusto.
Aveva il problema oggi, la mia cartella .vagrant
mancava e ha scoperto che c'erano alcuni altri passaggi che semplicemente impostando l'ID:
- .
-
Imposta l'ID:
.VBoxManage list vms
Trova l'ID e impostato in
{project-folder}/.vagrant/machines/default/virtualbox/id
.Nota che
default
potrebbe essere diverso se impostato inVagrantfile
E.G.config.vm.define "someothername"
. -
Arresta la macchina dal provisioning:
Creare un file denominato
action_provision
nello stesso DR del fileid
, impostare il suo contenuto su:1.5:{id}
Sostituzione{id}
con l'ID Trovato nel passaggio 1. -
Imposta una nuova chiave pubblica / privata:
VAGRANT utilizza una chiave privata memorizzata in
.vagrant/machines/default/virtualbox/private_key
in SSH nella macchina.Avrai bisogno di generare uno nuovo.
.ssh-keygen -t rsa
NOME IT
private_key
.vagrant ssh
quindi copiare ilprivate_key.pub
in/home/vagrant/.ssh/authorized_keys
.
Aggiornamento con lo stesso problema oggi con Vagagrant 1.7.4:
- .
- Filo utile a https://github.com/mitchellh/vagrant/issues/1755
e appositamente con i seguenti comandi:
Ad esempio, per accoppiare la scatola 'vip-quickstart_default_1431365185830_12124' a vagabant.
.$ VBoxManage list "vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27} $ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
Per le configurazioni multi-VM, sembrerebbe questo:
{
"active":{
"web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
"db":"13503bc5-76b8-4c26-95c4-32435b372212"
}
}
.
È possibile ottenere i nomi VM dal VagrantFile utilizzato per creare quei VM.Cerca questa linea:
config.vm.define :web do |web_config|
.
"Web" è il nome della VM in questo caso.
Sto usando Vagrant 1.8.1 su OSX EL Capitan
La mia VM non è stata chiusa correttamente quando il mio computer si riavviato, quindi quando ho provato vagrant up
ha sempre creato nuova VM.Nessuna soluzione qui ha funzionato per me.Ma cosa ha fatto un lavoro è stata una variazione di Risposta di ingmmurillo
Quindi invece di creare .vagrant/machines/default/virtualbox/id
in base all'ID da eseguire VBoxManage list vms
.Ho dovuto aggiornare l'ID in .vagrant/machines/local/virtual_box/id
Ho una fodera che sostanzialmente lo fa per me:
echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id
Si presume che la prima casella è quella che devo iniziare da eseguire VBoxManage list vms
in VagRant 1.9.1:
Ho avuto una VM in una scatola virtuale denominata 'ubuntu 16.04.1' così l'ho confezionato come una scatola vagabondata 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
. Questo è modificato da @ Risposta di Petecoop .
Esegui vagrant halt
Se non hai ancora chiuso la scatola.
Allora Elenca i tuoi VirtualBoxes: VBoxManage list vms
Elencherà tutte le tue virtualboxes. Identifica la casella che desideri tornare e afferrare l'ID tra le staffe ricci: {}
.
Quindi modificare il file ID progetto: sudo nano .vagrant/machines/default/virtualbox/id
(dalla directory del progetto)
Sostituiscilo con l'ID che hai copiato dall'elenco di VBS.
prova vagrant reload
.
Se ciò non funziona e viene appeso all'autorizzazione SSH (dove sono inciampato), copia la chiave pubblica insicura da VAGRANT GIT . Sostituire il contenuto di /.vagrant/machines/default/virtualbox/private_key
. Backup L'originale certo: cp private_key private_key-bak
.
Quindi eseguire vagrant reload
. Dirò che è identificato la chiave insicura e 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 tutto impostato.
Sono su macos e scopri che rimuovendo i .locks sulle scatole risolti il mio problema.
per qualche motivo
vagrant halt
.
non ha rimosso queste serrature e dopo aver ripristinato tutte le mie impostazioni in .vagrant / Machine / Default / VirtualBox utilizzando TimeMachine, rimuovendo le serrature, la macchina giusta avviata.
rimane solo 1 problema minore, è stato avviato in Grub, quindi ho dovuto premere Invio una volta, non so se questo è restando, ma lo scoprirò abbastanza presto.
Sto eseguendo Vagrant 1.7.4 e VirtualBox 5.0.2