使用returning a value from a provision script to vagrant中的建议,我正在运行一个将值写入文件的配置脚本。我希望Ruby打开这个文件并有条件地重新加载VM,具体取决于值是什么(通过=IF(B2<>"",B2+45,"")
安装插件可以实现config.vm.provision :reload
行。然后我想要运行第二个配置脚本。
我对使用以下代码在我的vagrantfile中执行Ruby命令的方式和时间感到困惑:当第一个配置文件脚本完成时,它会直接转到第二个而不打印任何内容或重新加载(requiresreboot.txt中的值为真)。
在第一个配置脚本完成后,我需要对文件处理代码进行哪些更改?
vagrant plugin install vagrant-reload
答案 0 :(得分:0)
如果你想从主机运行脚本,我会重申你使用这个插件:
如果你想在来宾机器上运行脚本,我认为你应该在主机上创建一个.rb文件,然后在来宾机器中复制并执行它,你可以这样做:
config.vm.provision :file, :source => "/path/ruby_script.rb", :destination => "/ruby_script.rb"
config.vm.provision :shell, :inline => "ruby /ruby_script.rb"
为此,您需要在客户机上安装ruby。
答案 1 :(得分:0)
我对Ruby命令的执行方式和时间感到困惑 在我的vagrantfile中使用下面的代码:当第一个配置器时 脚本完成它直接一个到第二个没有打印 任何事情或重新加载(requiresreboot.txt中的值为true)。
正如您所看到的那样,脚本一直在运行 - 而不是一行一行。例如,vagrant将执行所有同步文件夹等,然后运行配置(配置按照它们写入的顺序运行,但即使在文件的开头它并不意味着它们将作为第一件事运行)所以发生的是什么那。那么你有什么
file = File.open("requiresreboot.txt", "r")
contents = file.read
在任何配置完成之前,由vagrant运行。所以没有打印,因为内容是空的
好但是它没有回答你的问题,你怎么能让它运作 - 说实话我不知道,我尝试用vagrant trigger plugin在命令后重新加载VM但是没有成功。并且流浪者不喜欢从流浪者的命令中被召唤。
vagrant vbguest插件基本上做你想做的事情,但是他们从一个插件运行它,所以可以访问所有的vagrant配置。如果你真的想做你想做的事,插件可能是最好的选择。