diff --git a/SVirtualBox b/SVirtualBox index a57769e..5f4425f 100755 --- a/SVirtualBox +++ b/SVirtualBox @@ -10,9 +10,12 @@ USAGE $scriptname [options] vmName OPTIONS - -n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés - -l Lister les machines virtuelles - -s Démarrer la machine virtuelle (par défaut) + -n, --nop + Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés + -l, --list + Lister les machines virtuelles + -s, --start + Démarrer la machine virtuelle. C'est l'action par défaut. Si le nom de la machine virtuelle n'est pas spécifiée, un menu est affiché -x, --gui @@ -23,12 +26,22 @@ OPTIONS laquelle l'accélération graphique est supportée, headless démarre la machine en tâche de fond, et separate affiche une fenêtre qui attaque la machine démarrée en tâche de fond. --separate est l'option par défaut. - -k Arrêter la machine virtuelle (par ACPI) - -p Mettre en veille la machine virtuelle (par ACPI) - -H Arrêter sauvagement la machine virtuelle - -R Redémarrer sauvagement la machine virtuelle - -S Enregistrer l'état de la machine virtuelle - -g Afficher le gestionnaire de machines virtuelle" + -k, -t, --stop + Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r + permettent de spécifier le type d'arrêt de la machine virtuelle + -p, --sleep + Mettre en veille la machine virtuelle (par ACPI) + -H, --poweroff + Arrêter sauvagement la machine virtuelle + -R, --reset + Redémarrer sauvagement la machine virtuelle + -S, --savestate + Enregistrer l'état de la machine virtuelle + -r, --rrestart + Arrêter la machine, restaurer l'état du dernier snapshot puis la + relancer. + -g, --gui + Afficher le gestionnaire de machines virtuelle" } function build_arrays() { @@ -68,11 +81,12 @@ function start_virtualbox() { } action=start -stopaction=acpipowerbutton type=separate +stopaction=acpipowerbutton +restore= parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ - -n action=nop \ + -n,--nop action=nop \ -l,--list action=list \ -s,--start action=start \ -x,--gui type=gui \ @@ -80,10 +94,11 @@ parse_opts + "${PRETTYOPTS[@]}" \ --separate type=separate \ -k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \ -p,--sleep '$action=stop; stopaction=acpisleepbutton' \ - -H '$action=stop; stopaction=poweroff' \ - -R '$action=stop; stopaction=reset' \ - -S '$action=stop; stopaction=savestate' \ - -g action=gui \ + -H,--poweroff '$action=stop; stopaction=poweroff' \ + -R,--reset '$action=stop; stopaction=reset' \ + -S,--savestate '$action=stop; stopaction=savestate' \ + -r,--rrestart '$action=stop; restore=1' \ + -g,--gui action=gui \ @ args -- "$@" && set -- "${args[@]}" || die "$args" "$scriptdir/EnsureVM" virtualbox || die @@ -128,10 +143,23 @@ elif [ "$action" == stop ]; then if [ -z "$vm" -a "${rvms[*]}" ]; then select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction" fi + [ -n "$vm" ] || die - if [ -n "$vm" ]; then - estep "Arrêt de $vm avec la méthode $stopaction" - VBoxManage -q controlvm "$vm" "$stopaction" + estep "Arrêt de $vm avec la méthode $stopaction" + VBoxManage -q controlvm "$vm" "$stopaction" || die + if [ -n "$restore" ]; then + ebegin "Attente de l'arrêt" + while true; do + build_arrays + array_contains svms "$vm" && break + edot + sleep 1 + done + eend + estep "Restauration du snapshot" + VBoxManage -q snapshot "$vm" restorecurrent || die + estep "Démarrage" + VBoxManage -q startvm --type "$type" "$vm" fi elif [ "$action" == gui ]; then