Come posso associare una directory di progetto Vagrant con un VirtualBox VM esistente?

StackOverflow https://stackoverflow.com/questions/9434313

  •  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?

È stato utile?

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:

    .
  1. 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 in Vagrantfile E.G.config.vm.define "someothername".

  2. Arresta la macchina dal provisioning:

    Creare un file denominato action_provision nello stesso DR del file id, impostare il suo contenuto su: 1.5:{id} Sostituzione {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_key in SSH nella macchina.Avrai bisogno di generare uno nuovo.

    ssh-keygen -t rsa
    
    .

    NOME IT private_key.

    vagrant ssh quindi copiare il private_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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top