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

StackOverflow https://stackoverflow.com/questions/9434313

  •  12-11-2019
  •  | 
  •  

Question

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

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

Était-ce utile?

La solution

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

Vagrant utilise le fichier ".vagrant" dans le même répertoire que votre "VagrantFile" pour suivre l'UUID de votre machine virtuelle. Ce fichier n'existera pas si une machine virtuelle n'existe pas. Le format du fichier est JSON. Cela ressemble à ceci si une seule machine virtuelle 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 configuration multi-VM).

Si votre machine virtuelle est devenue en quelque sorte dissociée, ce que vous pouvez faire est de faire VBoxManage list vms qui répertorie chaque machine virtuelle que VirtualBox connaît par son nom et UUID. Puis créer manuellement un .vagrant fichier dans le même répertoire que votre Vagrantfile et remplissez correctement le contenu.

Courir vagrant status Pour s'assurer que Vagrant a ramassé les changements appropriés.

Noter: Cela n'est pas officiellement soutenu par Vagrant et Vagrant peut modifier le format de .vagrant à tout moment. Mais cela est valable en Vagrant 0.9.7 et sera valable pour Vagrant 1.0.

Autres conseils

Pour Vagrant 1.6.3 procédez comme suit:

1) Dans le répertoire où se trouve votre VagrantFile, exécutez la commande

VBoxManage list vms

Vous aurez quelque chose comme ceci:

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

2) Accédez au chemin suivant:

cd .vagrant/machines/default/virtualbox

3) Créer un fichier appelé identifiant avec l'ID de votre VM xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx

4) Enregistrer le fichier et exécuter vagabonder

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

Mais vous devez d'abord lancer le fichier .vbox à 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.

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

  1. Définissez l'ID:

    VBoxManage list vms
    

    Trouvez l'ID et installez-vous {project-folder}/.vagrant/machines/default/virtualbox/id.

    Notez que default peut être différent si vous êtes réglé dans votre Vagrantfile par exemple config.vm.define "someothername".

  2. Empêcher la machine de provisionner:

    Créer un fichier nommé action_provision dans le même diant que le id fichier, définissez son contenu sur: 1.5:{id} remplacement {id} avec l'ID trouvé à l'étape 1.

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

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

    ssh-keygen -t rsa
    

    nomme le private_key.

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

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

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 de VagrantFile utilisés pour créer ces machines virtuelles. Recherchez cette ligne:

config.vm.define :web do |web_config|

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

j'utilise Vagrant 1.8.1 sur OSX EL CAPITAN

Ma machine virtuelle n'a pas été fermée correctement lorsque mon ordinateur a redémarré, alors quand j'ai essayé vagrant up Il créait toujours une nouvelle machine virtuelle. Aucune solution ici n'a fonctionné pour moi. Mais ce qui a fonctionné était une variation de La réponse d'Ingmrurillo

Donc, au lieu de créer .vagrant/machines/default/virtualbox/id Basé sur l'ID de la course VBoxManage list vms. J'ai dû mettre à jour l'ID dans .vagrant/machines/local/virtual_box/id

J'ai une doublure One qui fait essentiellement cela pour moi:

echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-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

Dans Vagrant 1.9.1:

J'avais une machine virtuelle dans une boîte virtuelle nommée 'Ubuntu 16.04.1', donc je l'ai emballée comme une boîte vague 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

Ceci est modifié à partir de La réponse de Petepoop.

Courir vagrant halt Si vous n'avez pas encore fermé la boîte.

Ensuite, énumérez vos VirtualBoxs: VBoxManage list vms

Il répertoriera toutes vos VirtualBox. Identifiez la case où vous souhaitez revenir et saisissez l'ID entre les supports bouclés: {}.

Modifiez ensuite le fichier d'ID du projet: sudo nano .vagrant/machines/default/virtualbox/id (à partir du répertoire du projet)

Remplacez-le par l'ID que vous avez copié à partir de la liste de VBS.

Essayer vagrant reload.

Si cela ne fonctionne pas et est accroché à l'autorisation SSH (où je suis tombé), copiez la clé publique non sécurisée de la Git vagabond. Remplacer le contenu de /.vagrant/machines/default/virtualbox/private_key. Sauvegarder l'original bien sûr: cp private_key private_key-bak.

Puis courez vagrant reload. Il dira qu'il a identifié la 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 réglé.

Je suis sur macOS et j'ai constaté que la suppression des blocs sur les boîtes a résolu mon problème.

Pour certaines raisons

vagrant halt

Je n'ai 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 démarrée.

Il ne reste plus qu'un problème mineur, il a démarré en 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'exécute Vagrant 1.7.4 et VirtualBox 5.0.2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top