137 votes

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

D'une manière ou d'une autre, mon projet Vagrant s'est dissocié de sa VM VirtualBox, de sorte que lorsque je vagrant up Vagrant va importer la boîte de base et créer une nouvelle machine virtuelle.

Existe-t-il un moyen de réassocier le projet Vagrant avec la VM existante ? Comment Vagrant associe-t-il en interne un fichier Vagrant à un répertoire de VM VirtualBox ?

215voto

ingmmurillo Points 81

Para Vagrant 1.6.3 faites ce qui suit :

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

VBoxManage list vms

Vous aurez quelque chose comme ceci :

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

2) Allez dans le chemin suivant :

cd .vagrant/machines/default/virtualbox

3) Créez un fichier appelé id avec l'ID de votre VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx

4) Sauvegardez le fichier et exécutez vagabondage

9 votes

Une bonne façon de créer le id fichier sans un saut de ligne est echo -n '<your id here>' > id .

1 votes

Il fonctionne très bien. Mais pourquoi cela se produit-il ?

0 votes

Cela a fonctionné pour moi avec Vagrant 1.7.2. Merci !

91voto

Mitchell Points 6646

AVERTISSEMENT : La solution ci-dessous fonctionne pour Vagrant 1.0.x mais pas Vagrant 1.1+.

Vagrant utilise le fichier ".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 de la machine virtuelle par défaut (si vous n'utilisez pas de configurations multi-VM).

Si votre VM s'est en quelque sorte dissociée, ce que vous pouvez faire, c'est VBoxManage list vms qui listera chaque VM que VirtualBox connaît par son nom et son UUID. Ensuite, créez manuellement un .vagrant dans le même répertoire que votre Vagrantfile et remplissez correctement le contenu.

Ejecutar vagrant status pour s'assurer que Vagrant a pris les bonnes modifications.

Note : Ceci n'est pas officiellement pris en charge par Vagrant et Vagrant peut changer le format des fichiers .vagrant à tout moment. Mais ceci est valable à partir de Vagrant 0.9.7 et le sera pour Vagrant 1.0.

0 votes

Génial ! Merci. J'avais l'impression que quelque chose manquait.

0 votes

Il se pourrait que le nom par défaut soit remplacé par un nom personnalisé sans utiliser la configuration multi-VM ?

48 votes

Pour Vagrant 1.1, les UUID sont stockés dans un fichier spécifique à la machine, à l'adresse suivante .vagrant/machines/{name}/{provider}/id . En fait, la seule chose que ce fichier contient est l'UUID.

48voto

Natim Points 4393

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

Mais d'abord, vous devez lancer le fichier .vbox à la main pour qu'il apparaisse dans la liste des fichiers. VBoxManage list vms

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

4 votes

De plus, il est important de noter que si vous modifiez le fichier id vous devez vous en tenir à une seule ligne. Pour une raison quelconque, il n'aime pas les nouvelles lignes à la fin (mon éditeur de texte les ajoute par défaut, donc j'ai eu des problèmes).

0 votes

J'ai rencontré un problème à ce sujet, car j'avais renommé le dossier dans lequel il se trouvait. Vagrant a insisté pour créer une nouvelle VM avec le même nom que le dossier, au lieu d'utiliser la VM existante. J'ai résolu le problème en créant une .vagrant au format 1.0, et il l'a mis à jour automatiquement. Dès que je l'ai fait, il a renommé l'ancienne VM au nom du nouveau répertoire du projet.

2 votes

Je ne suis pas sûr de la cause de la déconnexion où mon vagrant/machines/default/virtualbox/id pointait vers le mauvais identifiant de machine VirtualBox. Le fichier qui a aidé est $HOME/.VirtualBox/VirtualBox.xml. Il comporte une section MachineRegistry dans laquelle les UUID des machines VirtualBox sont mis en correspondance avec les noms des machines. Par exemple <MachineEntry uuid="{f232f951-103b-af28-9f8d-b2ab21bs258f}" src="$HOME/VirtualBox VMs\<machine-name>\<machine-name>.vbox"/>

15voto

Petecoop Points 116

J'ai eu le même problème aujourd'hui, mon .vagrant était manquant et j'ai découvert qu'il y avait quelques étapes de plus que la simple définition de l'identifiant :

  1. Définissez l'identifiant :

    VBoxManage list vms

    Trouvez l'identifiant et l'ensemble dans {project-folder}/.vagrant/machines/default/virtualbox/id .

    Notez que default peut être différente si elle est définie dans votre Vagrantfile par exemple config.vm.define "someothername" .

  2. Arrêtez le provisionnement de la machine :

    Créez un fichier nommé action_provision dans le même répertoire que le id et définissez son contenu comme suit : 1.5:{id} remplacement de {id} avec l'identifiant trouvé à l'étape 1.

  3. Configurez une nouvelle clé publique/privée :

    Vagrant utilise une clé privée stockée dans .vagrant/machines/default/virtualbox/private_key pour se connecter à la machine. Vous devrez en générer un nouveau.

    ssh-keygen -t rsa

    nommez-le private_key .

    vagrant ssh puis copier le private_key.pub en /home/vagrant/.ssh/authorized_keys .

0 votes

Est-ce que "authorized_keys" est un fichier ou un répertoire ?

0 votes

C'est un fichier, si vous faites une recherche dessus vous trouverez plein de choses, c'est un truc standard de ssh.

0 votes

Comme j'utilisais les mêmes clés, je n'ai pas eu à faire le dernier setp (troisième). Sinon, vraiment bien expliqué et tout est parfait.

9voto

eton_ceb Points 544

Mise à jour avec le même problème aujourd'hui avec Vagrant 1.7.4 :

Par exemple, pour coupler 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X