Comment associer un répertoire de projet Vagrant à une machine virtuelle VirtualBox existante?
-
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?
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:
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 votreVagrantfile
par exempleconfig.vm.define "someothername"
.Empêcher la machine de provisionner:
Créer un fichier nommé
action_provision
dans le même diant que leid
fichier, définissez son contenu sur:1.5:{id}
remplacement{id}
avec l'ID trouvé à l'étape 1.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 leprivate_key.pub
dans/home/vagrant/.ssh/authorized_keys
.
Mise à jour avec le même problème aujourd'hui avec Vagrant 1.7.4:
- Fil utile à https://github.com/mitchellh/vagrant/issues/1755et spécialement avec les commandes suivantes:
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