Hanya menawarkan alternatif di sini yang berhasil untuk saya, menggunakan pemicu gelandangan. Pertimbangkan contoh ini langsung dari dokumen mereka:
Menjalankan skrip jarak jauh untuk menyimpan database di host Anda sebelum menghancurkan tamu:
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
Ada juga plugin pemicu gelandangan terkait yang dapat Anda lihat
Anda dapat menggunakan run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'
Ini akan memastikan perintah Anda dijalankan setiap kali VM Anda dimulai (vagrant up atau vagrant reload)
Jika Anda hanya membutuhkan perintah tertentu untuk selalu dijalankan, Anda dapat memisahkan skrip Anda
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"
skrip akan dijalankan secara berurutan, bootstrap1 lalu 2 lalu 3 saat mesin pertama kali disediakan
kapan pun Anda menjalankan vagrant up
(atau muat ulang) hanya bootstrap2 yang akan dijalankan
Saya menggunakan ubuntu 18.04. Pemicu tidak berfungsi untuk saya, jadi saya memilih untuk menyalin skrip pasca-penyediaan ke kotak vm dan kemudian dari skrip master, jalankan pasca-penyediaan yang diinginkan:
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
konten skrip master menggunakan exec untuk menyegarkan shell baru. Anda juga bisa menggunakan
setel ulang
sudo chmod +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh