Wie ordne ich ein Vagrant-Projektverzeichnis einer vorhandenen VirtualBox-VM zu?

131

Irgendwie hat sich mein Vagrant-Projekt von seiner VirtualBox-VM getrennt, sodass vagrant upVagrant bei I die Basisbox importiert und eine neue virtuelle Maschine erstellt.

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

jrdmcgr
quelle

Antworten:

89

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

Vagrant verwendet die Datei ".vagrant" im selben Verzeichnis wie Ihre "Vagrant-Datei", um die UUID Ihrer VM zu verfolgen. Diese Datei ist nicht vorhanden, wenn keine 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 sich Ihre VM irgendwie getrennt hat, können Sie VBoxManage list vmsjede VM, die VirtualBox kennt, anhand ihres Namens und ihrer UUID auflisten. Erstellen Sie dann manuell eine .vagrantDatei im selben Verzeichnis wie Ihre Vagrantfileund füllen Sie den Inhalt ordnungsgemäß aus.

Führen Sie vagrant statusden Vorgang aus, um sicherzustellen, dass Vagrant die richtigen Änderungen vorgenommen hat.

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

Mitchell
quelle
Genial! Danke dir. Ich hatte das Gefühl, dass etwas fehlte.
jrdmcgr
48
Für Vagrant 1.1 werden die UUIDs in einer maschinenspezifischen Datei unter gespeichert .vagrant/machines/{name}/{provider}/id. Tatsächlich enthält die Datei nur die UUID.
2
Ich habe diesen Trick ausprobiert, aber der Vagabundstatus meldet den Status einfach als nicht erstellt. Vagrant up erstellt dann eine neue VM und funktioniert einwandfrei. Wenn ich die ID-Datei ändere, wird sie als nicht erstellt gemeldet, auch wenn ich sie wieder in die UUID der gerade erstellten Box ändere.
Reece Marsland
4
Stellen Sie bei Vagrant 1.1+ sicher, dass Sie am Ende der ID keine neue Zeile einfügen. Siehe github.com/mitchellh/vagrant/issues/1755 für Details
Mads Mobæk
1
Ich habe in meinem Profil (Mac) nach .vagrant gesucht. Beachten Sie, dass es sich (zumindest für mich) im selben Ordner wie der Kochbuchordner und VagrantFile befand. (Vagrant Version 1.4.3)
Allicarn
207

Führen Sie für Vagrant 1.6.3 Folgendes aus:

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

VBoxManage list vms

Sie werden so etwas haben:

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

2) Gehen Sie zum folgenden Pfad:

cd .vagrant/machines/default/virtualbox

3) Erstellen Sie eine Datei mit dem Namen id mit der ID Ihrer VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

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

ingmmurillo
quelle
8
Eine gute Möglichkeit, die idDatei ohne Zeilenumbruch zu erstellen, ist echo -n '<your id here>' > id.
Xiong Chiamiov
1
Funktioniert super. Aber warum passiert das?
JohnnyQ
Arbeitete für mich mit Vagrant 1.7.2. Vielen Dank!
Rafen
1
Hat perfekt funktioniert.
Casey Robinson
# test1 und test2 boxen ...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

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

Aber zuerst müssen Sie die .vbox-Datei von Hand starten, damit sie in angezeigt wird VBoxManage list vms

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

Natim
quelle
4
Beachten Sie außerdem, dass Sie die idDatei beim Bearbeiten in einer einzigen Zeile halten müssen. Aus irgendeinem Grund mag es keine Zeilenumbrüche am Ende (mein Texteditor fügt sie standardmäßig hinzu, daher hatte ich Probleme).
Dan2552
Ich hatte ein Problem damit, weil ich den Ordner, in dem er sich befand, umbenannt hatte. Vagrant bestand darauf, eine neue VM mit demselben Namen wie der Ordner zu erstellen, anstatt die vorhandene VM zu verwenden. Ich habe es behoben, indem ich eine .vagrantDatei im 1.0-Format erstellt habe, und es wurde automatisch aktualisiert. Sobald ich dies tat, wurde die alte VM in den neuen Projektverzeichnisnamen umbenannt.
Jonah
2
Ich bin nicht sicher, was die Trennung verursacht hat, bei der mein Vagabund / machine / default / virtualbox / id auf die falsche VirtualBox-Maschinen-ID zeigte. Die Datei, die geholfen hat, war $ HOME / .VirtualBox / VirtualBox.xml. Es verfügt über einen MachineRegistry-Abschnitt, in dem die UUIDs der VirtualBox-Maschine den Computernamen zugeordnet sind. Zum Beispiel <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox-VMs \ <Maschinenname> \ <Maschinenname> .vbox" />
arntg
14

Hatte das Problem heute, .vagrantfehlte mein Ordner und stellte fest, dass es ein paar Schritte mehr gab, als nur die ID festzulegen:

  1. Stellen Sie die ID ein:

    VBoxManage list vms
    

    Finden Sie die ID und setzen Sie ein {project-folder}/.vagrant/machines/default/virtualbox/id.

    Beachten Sie, dass defaultdies anders sein kann, wenn Sie Vagrantfilez config.vm.define "someothername".

  2. Stoppen Sie die Bereitstellung des Computers:

    Erstellen Sie eine Datei mit action_provisiondemselben Namen wie die idDatei und setzen Sie den Inhalt auf: 1.5:{id}Ersetzen {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_keyssh gespeichert ist, um in die Maschine zu ssh. Sie müssen eine neue generieren.

    ssh-keygen -t rsa
    

    nenne es private_key.

    vagrant sshdann kopieren Sie die private_key.pubin /home/vagrant/.ssh/authorized_keys.

Petecoop
quelle
Ist "autorisierte_Tasten" eine Datei oder ein Verzeichnis?
user2568374
Es ist eine Datei, wenn Sie danach suchen, werden Sie viele Dinge finden, es ist eine Standard-
SSH-
Da ich dieselben Schlüssel verwendete, musste ich nicht den letzten Satz (dritten) ausführen. Ansonsten wirklich gut erklärt und alles perfekt.
Dazag
Wie man den dritten Schritt auf win10 macht?
navono
9

Update mit dem gleichen Problem heute mit Vagrant 1.7.4:

Zum Beispiel, um die Box 'vip-quickstart_default_1431365185830_12124' mit 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
eton_ceb
quelle
6

Bei Multi-VM-Setups würde dies folgendermaßen aussehen:

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

Sie können die VM-Namen aus der Vagrant-Datei abrufen, die zum Erstellen dieser VMs verwendet wurde. Suchen Sie nach dieser Zeile:

config.vm.define :web do |web_config|

"web" ist in diesem Fall der Name der VM.

agwntr
quelle
Und db ist eine Standard-VM?
Robert
1
Ich glaube nicht, dass es hier einen Standard gibt, nur Web und DB. Abhängig von der Vagrant-Datei gibt es eine Reihenfolge, in der vm zuerst erstellt wird.
Agwntr
5

Ich verwende Vagrant 1.8.1 unter OSX El Capitan

Meine VM wurde beim Neustart meines Computers nicht richtig geschlossen. Wenn ich vagrant upes versuchte , wurde immer eine neue VM erstellt. Hier haben keine Lösungen für mich funktioniert. Aber was funktionierte, war eine Variation von Ingmmurillos Antwort

Also anstatt .vagrant/machines/default/virtualbox/idbasierend auf der ID zu erstellen, wird ausgeführt VBoxManage list vms. Ich musste die ID aktualisieren.vagrant/machines/local/virtual_box/id

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 Laufen zu beginnen VBoxManage list vms

Brendan
quelle
4

Dies wird aus der Antwort von @ Petecoop geändert .

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

Listen Sie dann Ihre Virtualboxen auf: VBoxManage list vms

Es werden alle Ihre Virtualboxen aufgelistet. Identifizieren Sie das Feld, zu dem 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(aus dem Projektverzeichnis)

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

Versuchen Sie es vagrant reload.

Wenn das nicht funktioniert und an der SSH-Autorisierung hängen bleibt (wo ich gestolpert bin), kopieren Sie den unsicheren öffentlichen Schlüssel aus dem Vagabund-Git . Ersetzen Sie den Inhalt von /.vagrant/machines/default/virtualbox/private_key. Sichern Sie das Original natürlich : cp private_key private_key-bak.

Dann renne vagrant reload. Es wird angezeigt, dass der unsichere Schlüssel identifiziert und ein neuer erstellt wurde.

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!

Sie sollten fertig sein.

Ethicka
quelle
3

In Vagrant 1.9.1:

Ich hatte eine VM in Virtual Box mit dem Namen 'Ubuntu 16.04.1', also habe ich sie 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
PeterVermont
quelle
0

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

Diese Sperren wurden nicht entfernt, und nachdem alle meine Einstellungen in .vagrant / machine / default / virtualbox mithilfe der Zeitmaschine wiederhergestellt und die Sperren entfernt wurden, wurde die richtige Maschine gestartet.

Es bleibt nur 1 kleines Problem übrig. Es wurde in grub gebootet, also musste ich einmal die Eingabetaste drücken. Ich weiß nicht, ob dies so bleibt, aber ich werde es früh genug herausfinden.

Ich verwende Vagrant 1.7.4 und Virtualbox 5.0.2

dmaij
quelle