在我的Vagrantfile中,我有一个预配器,如下所示:
config.vm.provision "reset", type: "shell", run: "always" do |s|
s.privileged = false
s.inline = "bash /path/to/my/reset/script.sh"
end
而且,当正常配置 Vagrant 时,它运行良好。但是我想做的是设置一个预配器,该预配器仅在我手动调用它时运行。因此,如果我要配备以下预配器:
config.vm.provision "otherScript", type: "shell", run: "manual" do |s|
s.privileged = false
s.inline = "bash /path/to/my/other/script.sh"
end
我将使用
vagrant provision --provision-with otherScript
运行它。我已经可以和其他供应商一起做到这一点。但是我找不到方法,因此当我执行vagrant provision
之类的操作时,它会跳过带有manual
的运行设置的任何内容。除了可以使用“总是”之外,我在与它相关的文档中找不到任何其他内容。我曾考虑使用诸如fabric或invoke(Python 3)之类的东西,但是随后我将不得不在团队中的所有计算机上进行设置。我可以使用脚本进行设置,但是我认为这可能会更容易。
有没有办法做到这一点?要设置仅在我手动调用时才运行的预配器?
最佳答案
当您需要整个团队中可用,可重复和可复制的复杂任务时,对手动/按需/显式预配器的合法需求是合理的。在需要时将数据库重置为干净的状态。
不幸的是,Vagrant仍然直接缺少这种选择。有关功能请求,请参见GitHub:https://github.com/mitchellh/vagrant/issues/5355。
幸运的是,通过Vagrantfile可以轻松解决此限制。毕竟只是Ruby。
if ARGV.include? '--provision-with'
config.vm.provision 'db-reset', type: 'shell', inline: 'mysql ...'
end