使用returning a value from a provision script to vagrant中的建议,我正在运行一个配置脚本,它将值写入文件。我想Ruby打开这个文件并根据值是否有条件地重新加载虚拟机(通过vagrant plugin install vagrant-reload
安装插件即可实现config.vm.provision :reload
行)。然后我想要运行第二个供应脚本。使用Ruby在运行配置脚本之间有条件地重新加载流浪虚拟机
我对如何以及何时使用下面的代码在我的vagrantfile中执行Ruby命令感到困惑:当第一个provisioner脚本完成时,它直接进入第二个,而不打印任何东西或重新加载(requiresreboot.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无论哪种情况,我将如何从外部脚本中重新加载虚拟机?即执行'config.vm.provision:reload' –
@kieran_pli,因为您正在运行shell脚本,您可以在脚本中调用'vagrant reload'。如果你使用的是Ruby脚本,你可以使用'IO来创建一个子进程。popen(“流浪重载”) –