浮浪者トリガーを使用して、ここで私のために働いた代替手段を提供するだけです。ドキュメントから直接この例を考えてみましょう:
ゲストを破棄する前に、リモート スクリプトを実行してホストにデータベースを保存する:
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
チェックアウトできる関連する vagrant-triggers プラグインもあります
run: 'always'
を使用できます
config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'
これにより、VM が起動するたびにコマンドが実行されるようになります (vagrant up または vagrant reload)
特定のコマンドだけを常に実行する必要がある場合は、スクリプトを分割できます
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"
スクリプトは、マシンが最初にプロビジョニングされるときに、bootstrap1、2、3 の順に実行されます
vagrant up
を実行するたびに (またはリロード)bootstrap2 のみが実行されます
ubuntu 18.04を使用しました。トリガーが機能しなかったので、ポスト プロビジョニング スクリプトを vm ボックスにコピーし、マスター スクリプトから目的のポスト プロビジョニングを実行することにしました:
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
マスター スクリプトの内容は、exec を使用して新しいシェルを更新します。
を使用することもできます <ブロック引用>リセット
sudo chmod +x *.sh
exec /home/vagrant/install-monitor-stack.sh
exec /home/vagrant/bootstrap.sh