J'utilise vagrant pour le développement. J'ai oublié de fermer quelques machines virtuelles. Lorsque je vais me déconnecter de mon ordinateur hôte, le processus d'arrêt d'Ubuntu semble se bloquer.
Pourrait-il y avoir un moyen de script une fermeture de toutes les boîtes vagabondes avec un peu de commandline-fu? Quelque chose comme ce qui suit, mais quelque chose qui fonctionne bien.
for f in $HOME/vagrant;
do;
cd $f
vagrant halt
done;
Réponses:
Pour un contrôle scriptable des machines Virtual Box, nous pouvons utiliser les commandes VBoxManage :
Répertoriez les machines en cours d’exécution (nom et UUID):
Arrêtez les machines virtuelles en les "hibernant" (recommandé pour éviter la perte de données)
Mise hors tension de machines virtuelles en cours d'exécution (non recommandé car nous risquons de perdre des données dans l'invité)
Utiliser ACPI dans un système d'exploitation invité prenant en compte l'ACPI (préférable à
poweroff
un arrêt progressif des invités)Voir aussi: Comment arrêter en toute sécurité le système d'exploitation invité dans VirtualBox à l'aide de la ligne de commande
Mise à jour de l'OP
Sur la base de cette réponse correcte sélectionnée ci-dessous, j'ai ajouté ce script bash "
$HOME/bin/stop-vagrant.sh
". Alors maintenant, j'ai quelque chose qui peut commencer en toute sécurité un arrêt de toutes les machines virtuelles vagabondes que j'ai peut-être allumées mais que j'avais oubliées au cours d'une session.Commande expliquée:
vboxmanage list runningvms |
- obtient une liste de tous les vms en cours d'exécution sous VirtualBoxsed -r 's/.*\{(.*)\}/\1/' |
- dénude la chaîne jusqu'à son numéro d'identificationxargs -L1 -I {} VBoxManage controlvm {} savestate
- exécute la commande save state sur chaque boîte ouverte.Sur
xargs
-L1
- prendre une ligne à la fois-I {}
- utilise {} comme espace réservé pour la commande suivantela source
-r
option est unique à GNU Sed.-E
place de-r
. C'est le drapeau pour utiliser des expressions régulières étendues.L'autre solution est intéressante pour la gestion de Virtualbox, mais Vagrant possède ses propres mécanismes de gestion des machines virtuelles et, comme mentionné dans l'un des commentaires, il prend en charge plus que VirtualBox, uniquement VMWare pour le moment, mais qui sait plus tard!
Cela semble fonctionner pour moi:
Remarque:
Cela fonctionne avec les versions de Vagrant après la version 1.6; pour les versions plus anciennes, vous devriez probablement mettre à niveau, mais si vous ne pouvez pas, une des autres options qui se concentrent sur Virtualbox peut être meilleure.
la source
global-status
commande a été introduite dans Vagrant 1.6 . Les utilisateurs de versions plus anciennes de Vagrant, en particulier ceux qui l’ont installé viaapt-get
et sont peut-être encore sur la version 1.4.3, devront mettre à jour leur installation de Vagrant avant de pouvoir utiliser cette commande.xargs
ne supporte pas-r
, vous pouvez donc installergxargs
viabrew
et l'utiliser à la place.Mon mécanisme pour cela:
vagrant global-status | grep virtualbox | cut -c 1-9 | while read line; do echo $line; vagrant halt $line; done;
virtualbox
(Filtre le texte d'aide, cassera si vous utilisez un autre fournisseur)vagrant halt $line
arrêter le vagabond pour cet identifiant unique globalC'est mieux que la méthode Virtualbox ci-dessus, car elle exécutera également tous les mécanismes d'arrêt configurés de manière vagabonde.
la source
sed
etawk
. Merci!vagrant suspend
plutôt que devagrant halt
sauvegarder l'état et de le suspendre plus rapidement.Au cas où d'autres personnes en arriveraient à cette question: pour ceux qui utilisent VirtualBox, cela peut déjà résoudre le problème, il suffit d'éditer un fichier:
L'avantage est qu'il n'est pas nécessaire de modifier / créer une déconnexion ou d'
init.d
effacer pour exécuter les commandes publiées dans les autres réponses. L'inconvénient est que cette solution est spécifique à VirtualBox.Testé sur Ubuntu 14.10 avec VirtualBox 4.3.18.
Tout le crédit va à ce post .
la source
En combinant certaines des autres réponses, toutes les boîtes virtuelles virtualbox en cours d'exécution seront fermées:
la source
Je viens d'utiliser
vagrant halt
. Si vous l'exécutez sans autre argument, il arrête toutes les machines définies dans le fichierVagrantfile
.la source
Si vous écrivez des scripts pour analyser les commandes Vagrant, il est conseillé d’analyser la sortie conviviale pour les machines (
--machine-readable
), qui est plus cohérente.Le format est:
vous pouvez donc l'importer en tant que fichier CSV, car il est séparé par des virgules.
Avec shell, c'est probablement plus difficile à analyser, par exemple:
Voir: Vagant - Sortie lisible par machine
Cependant, je trouve plus facile d'analyser la sortie standard, par exemple
Btw. Théoriquement, la
vagrant
commande devrait accepter une expression régulière pour la liste des machines virtuelles à suspendre conformément à cette publication GH , par exemple:mais cela ne fonctionne pas et il y a un bogue # 7221 qui est en attente afin de le réparer.
Billets GitHub associés:
la source
Cela peut ou peut ne pas fonctionner pour vous ;-) Fonctionne pour moi
vagrant_halt_all.sh
la source