使用Ruby在运行的配置脚本之间有条件地重新加载vagrant VM

时间:2016-05-17 16:31:39

标签: ruby vagrant provisioning

使用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

2 个答案:

答案 0 :(得分:0)

如果你想从主机运行脚本,我会重申你使用这个插件:

vagrant-host-shell

如果你想在来宾机器上运行脚本,我认为你应该在主机上创建一个.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配置。如果你真的想做你想做的事,插件可能是最好的选择。