it-swarm.com.de

Wie verbinde ich ein Vagrant-Projektverzeichnis mit einer vorhandenen VirtualBox-VM?

Irgendwie hat sich mein Vagrant-Projekt von seiner VirtualBox-VM getrennt, so dass Vagrant, wenn ich vagrant up die Base-Box importiere und eine neue virtuelle Maschine erstellt.

Gibt es eine Möglichkeit, das Vagrant-Projekt der vorhandenen VM erneut zuzuordnen? Wie ordnet Vagrant eine Vagrant-Datei intern einem VirtualBox-Verzeichnis VM zu?

124
jrdmcgr

WARNUNG: Die Lösung unten funktioniert für Vagrant 1.0.x, aber nicht Vagrant 1.1+.

Vagrant verwendet die ".vagrant" -Datei im selben Verzeichnis wie Ihre "Vagrantfile", um die UUID Ihrer VM zu verfolgen. Diese Datei ist nicht vorhanden, wenn kein VM vorhanden ist. Das Format der Datei ist JSON. Es sieht so aus, wenn eine einzelne VM vorhanden ist:

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

default ist der Name der virtuellen Standardmaschine (wenn Sie keine Multi-VM-Setups verwenden). 

Wenn Ihre VM irgendwie getrennt wurde, können Sie VBoxManage list vms tun, der alle VM auflistet, die VirtualBox mit Namen und UUID kennt. Erstellen Sie dann manuell eine .vagrant-Datei in demselben Verzeichnis wie Ihre Vagrantfile und füllen Sie den Inhalt ordnungsgemäß aus.

Führen Sie vagrant status aus, um sicherzustellen, dass Vagrant die richtigen Änderungen übernommen hat.

Hinweis: Dies wird von Vagrant nicht offiziell unterstützt, und Vagrant kann das Format von .vagrant jederzeit ändern. Dies gilt jedoch ab Vagrant 0.9.7 und gilt für Vagrant 1.0.

87
Mitchell

Für Vagrant 1.6.3 mach folgendes:

1) Führen Sie in dem Verzeichnis, in dem sich Ihre Vagrant-Datei befindet, den Befehl aus

VBoxManage list vms

Sie werden so etwas haben:

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

2) Gehen Sie zu folgendem Pfad: 

cd .vagrant/machines/default/virtualbox

3) Erstellen Sie eine Datei namens id mit der ID Ihres VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) Speichern Sie die Datei und führen Sie vagrant auf

190
ingmmurillo

Die Lösung mit der oberen Version ist ziemlich gleich.

Zuerst müssen Sie jedoch die .vbox-Datei manuell starten, damit sie in VBoxManage list vms angezeigt wird.

Dann können Sie mit .vagrant/machines/default/virtualbox/id überprüfen, ob die UUID die richtige ist.

47
Natim

Hatte das Problem heute, mein .vagrant-Ordner fehlte und stellte fest, dass es einige Schritte mehr gab, als nur die ID einzustellen:

  1. Setze die ID:

    VBoxManage list vms
    

    Suchen Sie die ID und setzen Sie sie in {project-folder}/.vagrant/machines/default/virtualbox/id.

    Beachten Sie, dass default anders sein kann, wenn sie in Ihrer Vagrantfile eingestellt ist, z. config.vm.define "someothername".

  2. Stoppen Sie die Bereitstellung der Maschine:

    Erstellen Sie eine Datei mit dem Namen action_provision im selben Verzeichnis wie die id-Datei. Setzen Sie den Inhalt auf: 1.5:{id} und ersetzen Sie {id} durch die in Schritt 1 gefundene ID.

  3. Richten Sie einen neuen öffentlichen/privaten Schlüssel ein:

    Vagrant verwendet einen privaten Schlüssel, der in .vagrant/machines/default/virtualbox/private_key gespeichert ist, um ssh in das Gerät einzulesen. Sie müssen einen neuen generieren.

    ssh-keygen -t rsa
    

    nennen Sie es private_key.

    vagrant ssh kopiert dann den private_key.pub in /home/vagrant/.ssh/authorized_keys.

13
Petecoop

Update mit demselben Problem heute mit Vagrant 1.7.4:

Zum Beispiel, um die Box 'vip-quickstart_default_1431365185830_12124' an vagrant zu koppeln.

$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id
8
eton_ceb

Für Multi-VM-Setups würde es so aussehen:

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

Sie erhalten die VM-Namen aus der Vagrant-Datei, die zum Erstellen dieser VMs verwendet wird. Suchen Sie nach dieser Zeile:

config.vm.define :web do |web_config|

"web" ist in diesem Fall der Name der virtuellen Maschine.

6
agwntr

Ich verwende Vagrant 1.8.1 auf OSX El Capitan

Meine VM wurde beim Neustart meines Computers nicht ordnungsgemäß geschlossen. Als ich vagrant up Ausprobierte, wurde immer eine neue VM erstellt. Hier hat keine Lösung für mich funktioniert. Aber was funktionierte, war eine Variation von ingmmurillos Antwort

Anstatt also .vagrant/machines/default/virtualbox/id Basierend auf der ID von VBoxManage list vms Zu erstellen. Ich musste die ID in .vagrant/machines/local/virtual_box/id Aktualisieren

Ich habe einen Einzeiler, der dies im Wesentlichen für mich erledigt:

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

Dies setzt voraus, dass die erste Box die ist, die ich brauche, um mit dem Ausführen von VBoxManage list vms Zu beginnen.

5
Brendan

Dies wird von @ Petecoops Antwort modifiziert.

Führen Sie vagrant halt aus, wenn Sie die Box noch nicht heruntergefahren haben.

Dann listen Sie Ihre virtuellen Boxen auf: VBoxManage list vms

Es werden alle Ihre virtuellen Boxen aufgelistet. Identifizieren Sie die Box, zu der Sie zurückkehren möchten, und greifen Sie die ID zwischen die geschweiften Klammern: {}.

Bearbeiten Sie dann die Projekt-ID-Datei: Sudo nano /.vagrant/machines/default/virtualbox/id

Ersetzen Sie es durch die ID, die Sie aus der Liste der VBs kopiert haben.

Versuchen Sie vagrant reload.

Wenn dies nicht funktioniert und bei der SSH-Autorisierung (wo ich gestolpert bin) gehängt wird, kopieren Sie den unsicheren öffentlichen Schlüssel aus dem vagrant git . Ersetzen Sie den Inhalt von /.vagrant/machines/default/virtualbox/private_key. Sichern Sie das Original natürlich: cp private_key private_key-bak.

Führen Sie dann vagrant reload aus. Es heißt, der unsichere Schlüssel wurde identifiziert und ein neuer erstellt. 

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!

Du solltest fertig sein.

3
ethicka

In Vagrant 1.9.1:

Ich hatte ein VM in Virtual Box mit dem Namen 'Ubuntu 16.04.1', also habe ich es als Vagrant-Box verpackt mit:

vagrant package --base "Ubuntu 16.04.1"

antwortet mit ...

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

Ich bin auf Macos und habe festgestellt, dass das Entfernen der .locks auf den Boxen mein Problem gelöst hat.

Aus irgendeinem Grund 

vagrant halt

ich habe diese Sperren nicht entfernt, und nachdem alle meine Einstellungen in .vagrant/machine/default/virtualbox mit timemachine wiederhergestellt wurden, die Sperren entfernt wurden, startete der richtige Computer. 

Es bleibt nur noch ein kleines Problem. Es hat sich in Grub gebootet, also musste ich einmal die Eingabetaste drücken. Ich weiß nicht, ob es bleibt, aber ich werde es bald herausfinden.

Ich verwende vagrant 1.7.4 und virtualbox 5.0.2

0
dmaij