web-dev-qa-db-fra.com

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

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

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

124
jrdmcgr

ATTENTION: 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 effectuer le suivi de l'UUID de votre VM. Ce fichier n'existera pas si un VM n'existe pas. Le format du fichier est JSON. Cela ressemble à ceci si un seul 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 est en quelque sorte dissociée, vous pouvez faire VBoxManage list vms, qui répertorie chaque VM connue de VirtualBox par son nom et son UUID. Créez ensuite manuellement un fichier .vagrant dans le même répertoire que votre Vagrantfile et remplissez le contenu correctement.

Exécutez vagrant status pour vous assurer que Vagrant a bien saisi les modifications appropriées.

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

87
Mitchell

Pour Vagrant 1.6.3 procédez comme suit:

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

VBoxManage list vms

Vous aurez quelque chose comme ça:

"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-xxxxxxxxxxxxx

4) Enregistrez le fichier et exécutez vagrant up

190
ingmmurillo

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

Mais vous devez d’abord lancer le fichier .vbox à la main pour qu’il apparaisse dans VBoxManage list vms

Ensuite, vous pouvez vérifier le .vagrant/machines/default/virtualbox/id pour vérifier que le uuid est le bon.

47
Natim

Si le problème se posait aujourd’hui, mon dossier .vagrant était manquant et il s’est avéré qu’il ne suffisait pas de définir l’id:

  1. Définir l'identifiant:

    VBoxManage list vms
    

    Recherchez l'ID et définissez-le dans {project-folder}/.vagrant/machines/default/virtualbox/id.

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

  2. Arrêtez la machine de provisionner:

    Créez un fichier nommé action_provision dans le même répertoire que le fichier id, définissez son contenu sur: 1.5:{id} en remplaçant {id} par l'ID 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 ssh dans la machine. Vous devrez en générer un nouveau.

    ssh-keygen -t rsa
    

    nommez-le private_key.

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

13
Petecoop

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

Par exemple, pour associer la zone 'vip-quickstart_default_1431365185830_12124' au vagabond.

$ 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

Pour les configurations multi-VM, cela ressemblerait à ceci:

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

Vous pouvez obtenir les noms de machine virtuelle à partir du fichier Vagrant utilisé pour créer ces ordinateurs virtuels. Cherchez cette ligne:

config.vm.define :web do |web_config|

"web" est le nom de la machine virtuelle dans ce cas.

6
agwntr

Ceci est modifié depuis la réponse de @ Petecoop .

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

Puis listez vos virtualboxes: VBoxManage list vms

Il va lister tous vos virtualbox. Identifiez la boîte sur laquelle vous souhaitez revenir et saisissez l'identifiant entre les accolades: {}.

Puis éditez le fichier d'identifiant de projet: Sudo nano /.vagrant/machines/default/virtualbox/id

Remplacez-le par l'id que vous avez copié dans la liste des VB.

Essayez vagrant reload.

Si cela ne fonctionne pas et reste bloqué sur l'autorisation SSH (où je suis tombé), copiez la clé publique non sécurisée du vagrant git . Remplacez le contenu de /.vagrant/machines/default/virtualbox/private_key. Sauvegardez l'original bien sûr: cp private_key private_key-bak.

Puis lancez vagrant reload. Il dira qu'il a identifié la clé non sécurisée et en crée 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 tous ensemble.

3
ethicka

Dans vagabond 1.9.1:

J'avais un VM dans Virtual Box nommé 'Ubuntu 16.04.1', je l'ai donc emballé sous la forme d'une boîte vagantante 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
PeterVermont

Je suis sur macos et a constaté que le fait de supprimer les verrous. Résolvait mon problème.

Pour certaines raisons 

vagrant halt

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

Il ne reste qu'un problème mineur, il a démarré dans grub, j'ai donc dû appuyer sur entrée une fois, je ne sais pas si cela reste, mais je le saurai assez tôt.

J'utilise vagrant 1.7.4 et virtualbox 5.0.2

0
dmaij