Comment associer un répertoire de projet Vagrant à une VM VirtualBox existante?

D'une certaine manière mon projet Vagrant s'est dissocié de sa VirtualBox VM, de sorte que lorsque je vagrant up Vagrant importera la base-box et créera une nouvelle machine virtuelle.

y a-t-il un moyen de rattacher de nouveau le projet Vagrant à la VM existante? Comment Vagrant associe-t-il en interne un Vagrantfile avec un répertoire VirtualBox VM?

120
demandé sur jrdmcgr 2012-02-24 20:26:18

10 réponses

avertissement: la solution ci-dessous fonctionne pour Vagrant 1.0.x mais pas Vagabond 1.1+.

Vagrant utilise le ".vagrant " dans le même répertoire que votre "Vagrantfile" pour suivre L'UUID de votre VM. Ce fichier n'existera pas si une VM n'existe pas. Le format du fichier est JSON. Il ressemble à ceci si une seule VM existe:

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

default est le nom du virtuel par défaut machine (si vous n'utilisez pas de configurations multi-VM).

si votre VM est quelque peu dissocié, ce que vous pouvez faire est de faire VBoxManage list vms qui listera toutes les VM que VirtualBox connaît par leur nom et leur UUID. Puis créez manuellement un fichier .vagrant dans le même répertoire que votre Vagrantfile et remplissez le contenu correctement.

Run vagrant status pour s'assurer que Vagrant a pris les bons changements.

Note: ceci n'est pas officiellement supporté par Vagrant et Vagrant peut changer le format de .vagrant à tout moment. Mais ceci est valable aussi Vagabond 0.9.7 et sera valable pour Vagrant 1.0.

86
répondu Mitchell 2013-03-29 19:34:42

Pour Vagrant 1.6.3 faire ce qui suit:

1) dans le répertoire où se trouve votre fichier Vagrant, lancez la commande

VBoxManage list vms

vous aurez quelque chose comme ceci:

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

2) Aller au chemin suivant:

cd .vagrant/machines/default/virtualbox

3) Créer un fichier appelé id avec L'ID de votre VM xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx

4) sauvegardez le fichier et lancez vagrant up

185
répondu ingmmurillo 2014-08-26 23:35:14

la solution avec la version supérieure est tout à fait la même.

mais vous devez d'abord lancer le .VBOX fichier à la main afin qu'il apparaisse dans VBoxManage list vms

alors vous pouvez vérifier le .vagrant/machines/default/virtualbox/id pour vérifier que l'uuid est le bon.

47
répondu Natim 2013-05-10 15:27:39

avait le problème aujourd'hui, mon dossier .vagrant manquait et a trouvé qu'il y avait quelques étapes de plus que simplement définir l'id:

  1. Définir l'id:

    VBoxManage list vms
    

    trouver l'id et mettre dans {project-folder}/.vagrant/machines/default/virtualbox/id .

    notez que default peut être différent si défini dans votre Vagrantfile par exemple config.vm.define "someothername" .

  2. arrêter la machine de provision:

    créer un fichier nommé action_provision dans le même dir que le fichier id , définir son contenu à: 1.5:{id} remplacer {id} par l'id trouvé à l'étape 1.

  3. Configuration d'une nouvelle clé publique/privée:

    Vagrant utilise une clé privée stockée dans .vagrant/machines/default/virtualbox/private_key pour SSH dans la machine. Vous aurez besoin de générer un nouveau.

    ssh-keygen -t rsa
    

    private_key .

    vagrant ssh puis copiez le private_key.pub dans /home/vagrant/.ssh/authorized_keys .

12
répondu Petecoop 2017-12-18 17:10:55

mise à Jour avec le même problème aujourd'hui avec Vagrant 1.7.4:

par exemple, pour jumeler la boîte 'vip-quickstart_default_1431365185830_12124' à 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
8
répondu eton_ceb 2015-11-09 11:04:12

pour les configurations multi-VM, il ressemblerait à ceci:

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

vous pouvez obtenir les noms de vm du fichier Vagrant utilisé pour créer ces VM. Cherchez cette ligne:

config.vm.define :web do |web_config|

et "web" est le nom de la vm dans ce cas.

6
répondu agwntr 2012-10-31 23:45:01

In Vagrant 1.9.1:

j'ai eu une VM dans la boîte virtuelle appelée 'Ubuntu 16.04.1' donc je l'ai empaqueté comme une boîte vagabonde avec:

vagrant package --base "Ubuntu 16.04.1"

répond avec...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box
3
répondu PeterVermont 2016-12-27 21:57:17

j'utilise Vagrant 1.8.1 on OSX El Capitan

ma vm n'était pas fermée correctement lorsque mon ordinateur a redémarré, donc quand j'ai essayé vagrant up il était toujours en train de créer une nouvelle vm. Aucune solution ici n'a fonctionné pour moi. Mais ce qui a fonctionné était une variation de réponse d'ingmmurillo

donc au lieu de créer .vagrant/machines/default/virtualbox/id basé sur l'id d'exécution VBoxManage list vms . J'ai eu à mettre à jour la carte d'identité .vagrant/machines/local/virtual_box/id

j'ai une doublure qui fait essentiellement cela pour moi:

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

cela suppose que la première boîte est celle dont j'ai besoin pour commencer à courir VBoxManage list vms

3
répondu Brendan 2018-02-27 15:51:22

ceci est modifié de la réponse de @Petecoop .

Exécuter vagrant halt si vous n'avez pas fermé la boîte encore.

alors listez vos boîtes virtuelles: VBoxManage list vms

il va énumérer toutes vos boîtes virtuelles. Identifiez la case à laquelle vous voulez revenir et saisissez l'id entre les crochets bouclés: {} .

puis éditer le fichier d'identification du projet: sudo nano /.vagrant/machines/default/virtualbox/id

remplacez-le par l'id que vous avez copié de la liste des VBs.

Essayer vagrant reload .

si cela ne fonctionne pas et est suspendu sur l'autorisation ssh (où j'ai trébuché), copier la clé publique non sécurisée à partir du Vagrant git . Remplacer le contenu de /.vagrant/machines/default/virtualbox/private_key . La sauvegarde de l'original, bien sûr: cp private_key private_key-bak .

, puis vagrant reload . Il dira qu'il a identifié clé non sécurisée et en créer une nouvelle.

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!

vous devriez être prêt.

2
répondu ethicka 2017-05-23 11:33:24

je suis sur macos et j'ai trouvé qu'en enlevant le .les verrous sur les boîtes résolu mon problème.

Pour une raison quelconque, 151920920"

vagrant halt

n'a pas enlevé ces serrures, et après avoir restauré tous mes paramètres .vagrant/machine/default / virtualbox en utilisant timemachine, en enlevant les serrures, la bonne machine a démarré.

il ne reste qu'un petit problème, il a démarré dans grub donc j'ai dû appuyer sur Entrée Une fois, je ne sais pas si cela reste, mais je le saurons bien assez tôt.

je lance vagrant 1.7.4 et virtualbox 5.0.2

0
répondu dmaij 2016-03-04 09:35:15