returning a value from a provision script to vagrantの提案を使用して、ファイルに値を書き込む1つのプロビジョニングスクリプトを実行しています。私はRubyがこのファイルを開き、値が何であるかに応じて条件付きでVMをリロードしたいと考えています(vagrant plugin install vagrant-reload
を通してプラグインをインストールするとconfig.vm.provision :reload
行が達成可能です)。次に、2番目のプロビジョニングスクリプトを実行します。実行中のプロビジョニングスクリプト間でRubyを使用して条件付きで迷惑メールVMを再ロードする
私の迷惑メールファイルで以下のコードを使ってRubyコマンドを実行する方法とタイミングが混乱しています:1番目のプロビジョニングスクリプトが完了すると、何も印刷せずにリロードするか、requirereboot.txt本当です)。
最初のプロビジョニングスクリプトの終了後にファイル処理コードを実行するには、どのような変更が必要ですか?
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script1 = <<SCRIPT
echo "Run this provisioner first to write a value to requiresreboot.txt... "
start-process "C:\\...\\vagrant_provisioning_file1.bat" -wait
SCRIPT
$script2 = <<SCRIPT
echo "Run this provisioner second... "
start-process "C:\\...\\vagrant_provisioning_file2.bat" -wait
SCRIPT
Vagrant.configure(2) do |config|
# Other vagrant setup.....
# ........................
File.new("requiresreboot.txt", "w+");
# Enable provisioning with a shell script 1.
config.vm.provision "shell", inline: $script1
file = File.open("requiresreboot.txt", "r")
contents = file.read
if contents == "max_rearms_reached"
print "Cannot extend Windows 7 trial: maximum number of rearms reached."
elsif contents == "true"
# trigger reload (reboot to apply changes for Windows trial renewal)
print "Windows trial renewal is required"
config.vm.provision :reload
elsif contents == "false"
print "No reload required, continuing with provisioning..."
end
file.close
# Enable provisioning with a shell script 2.
config.vm.provision "shell", inline: $script2
end
@ allesandro-caetanoどちらの場合でも、外部スクリプトからVMをどのようにリロードできますか?すなわち、 'config.vm.provision:reload'を実行してください。 –
@kieran_pliシェルスクリプトを実行しているので、スクリプト内から' vagrant reload'を呼び出すことができます。ルビスクリプトを使用している場合は、 'IOを使用してサブプロセスを作成することができます。popen(「流行りのリロード」) ' –