Je lisais dans bash un tutoriel où ils disaient de redémarrer la machine, il n'y avait pas d'option pour redémarrer directement un service, il s'agissait simplement de redémarrer la machine, puis il y avait plus de commandes après cela qui devaient encore être exécutées lors du provisioning .
Alors, y a-t-il un moyen de redémarrer une boîte au milieu du provisioning, puis de reprendre là où vous l'avez laissé?
Autant que je sache, vous ne pouvez pas avoir un seul script/ensemble de commandes qui continueraient là où il était laissé s'il essayait de redémarrer le système d'exploitation, tels que:
config.vm.provision "Shell", inline: <<-Shell
echo $(date) > ~/rebootexample
reboot
echo $(date) >> ~/rebootexample
Shell
Dans cet exemple, le deuxième appel d'écho ne serait pas exécuté.
Vous pouvez scinder le script/les commandes et utiliser un plugin tel que vagrant reload .
Un exemple de fragment de fichier Vagrant pour souligner son utilisation possible:
# execute code before reload
config.vm.provision "Shell", inline: <<-Shell
echo $(date) > ~/rebootexample
Shell
# trigger reload
config.vm.provision :reload
# execute code after reload
config.vm.provision "Shell", inline: <<-Shell
echo $(date) >> ~/rebootexample
Shell
Je n'ai jamais fait cela, mais si je devais le faire, je scinderais le script en deux parties, une avant le redémarrage, qui inclut la commande de redémarrage, puis une autre après l'installation.
Le premier créerait également un fichier de verrouillage.
Le script global exécuterait le premier script si le fichier de verrouillage n'existait pas ou exécutait le second si le fichier existait. Ce script global serait configuré pour le démarrage.
Une astuce que vous pouvez utiliser consiste à envoyer le signal de redémarrage et à enregistrer le reste du travail de provisionnement sous forme de script à exécuter au démarrage:
config.vm.provision "Shell", inline: <<-Shell
echo "Do your thing... DONE"
cat <<-RCLOCAL | sed -s 's_^ __' > /etc/rc.local
#!/bin/bash
echo "This will be run once on next boot and then it's destroyed and never run again"
rm /etc/rc.local
RCLOCAL
chmod o+x /etc/rc.local
shutdown -r now #restart
Shell
Cela a été testé pour fonctionner sur debian 9, vous devrez donc peut-être activer des services ou trouver un autre moyen d'obtenir votre code encapsulé pour qu'il s'exécute au prochain démarrage si vous utilisez autre chose.
Malheureusement, vous ne pouvez pas simplement faire:
config.vm.provision "Shell", inline: "shutdown -r now"
config.vm.provision "Shell", inline: "echo 'hello world'"
results in ==>
The SSH connection was unexpectedly closed by the remote end. This
usually indicates that SSH within the guest machine was unable to
properly start up. Please boot the VM in GUI mode to check whether
it is booting properly.