Solo ofrezco una alternativa aquí que funcionó para mí, usando disparadores vagabundos. Considere este ejemplo directamente de sus documentos:
Ejecutar un script remoto para guardar una base de datos en su host antes de destruir un invitado:
Vagrant.configure("2") do |config|
config.vm.define "ubuntu" do |ubuntu|
ubuntu.vm.box = "ubuntu"
ubuntu.trigger.before :destroy do |trigger|
trigger.warn = "Dumping database to /vagrant/outfile"
trigger.run_remote = {inline: "pg_dump dbname > /vagrant/outfile"}
# or trigger.run = {...} to run the command on the host instead
# of guest
end
end
end
También está el complemento de activadores de vagabundos relacionado que puede consultar
puedes usar run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'
Esto asegurará que su comando se ejecute cada vez que se inicia su VM (vagrant up o vagabundo recargar)
Si solo necesita que ciertos comandos se ejecuten siempre, puede dividir su secuencia de comandos
config.vm.provision :shell, path: "vagrant/bootstrap1.sh"
config.vm.provision :shell, path: "vagrant/bootstrap2.sh", run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap3.sh"
el script se ejecutará en orden, bootstrap1, luego 2 y luego 3 cuando la máquina se aprovisione por primera vez
cada vez que ejecute vagrant up
(o recargar) solo se ejecutará bootstrap2
Usé ubuntu 18.04. Los disparadores no funcionaron para mí, así que elegí copiar el script de posprovisión a vm box y luego, desde un script maestro, ejecutar la posprovisión deseada:
config.trigger.before :provisioner_run, type: :hook do |t|
t.info = "Before the provision!"
end
config.vm.provision "shell" do |s|
s.inline = "echo $1 "
s.args = [" '--->' Provisioning the environment!"]
end
config.vm.provision "file", source: "scripts/post-provision/.", destination: "/home/vagrant"
config.vm.provision "shell", path: "scripts/install.sh"
# config.vm.provision "shell", path: "scripts/bootstrap.sh", run: 'always'
# config.trigger.after :up do |trigger|
# trigger.info = "Installing Monitoring Stack..."
# trigger.run_remote = {path: "./install-monitor-stack.sh"}
# end
end
El contenido del script maestro usa exec para actualizar el nuevo shell. También puedes usar
restablecer
sudo chmod +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh