Jen nabízím alternativu, která pro mě fungovala, pomocí tuláků. Zvažte tento příklad přímo z jejich dokumentů:
Spuštění vzdáleného skriptu pro uložení databáze na vašem hostiteli před zničením hosta:
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
K dispozici je také související plugin vagrant-triggers, který si můžete vyzkoušet
můžete použít run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'
Tím zajistíte, že váš příkaz bude proveden při každém spuštění vašeho virtuálního počítače (vagrant up nebo vagrant reload)
Pokud potřebujete, aby byly vždy spuštěny pouze určité příkazy, můžete skript rozdělit
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"
skript bude spuštěn v pořadí, bootstrap1, poté 2 a poté 3 při prvním zřízení počítače
při každém dalším spuštění vagrant up
(nebo znovu načíst) bude spuštěn pouze bootstrap2
Použil jsem ubuntu 18.04. Spouštěče mi nefungovaly, takže jsem se rozhodl zkopírovat skript post-provision do vm boxu a poté z hlavního skriptu spustit požadovaný post-provision:
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
obsah hlavního skriptu používá exec k obnovení nového shellu. Můžete také použít
resetovat
sudo chmod +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh