在我的Vagrantfile中,我有一个像这样的配置器:
config.vm.provision "reset", type: "shell", run: "always" do |s|
s.privileged = false
s.inline = "bash /path/to/my/reset/script.sh"
end
当正常配置流浪汉时,它运行正常。但我想做的是设置一个只在我手动调用时运行的配置器。所以,如果我有以下配置者:
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)这样的东西但是我必须在我团队中的所有计算机上进行设置。我可以使用脚本进行设置,但我认为如果可能的话,这可能会更容易。
有没有办法实现这个目标?要设置只在我手动调用它时才运行的配置器吗?
答案 0 :(得分:6)
当您需要在整个团队中提供,可重复且可重现的复杂任务时,才需要手动/按需/显式供应商。在需要时将数据库重置为干净的平板。
不幸的是,Vagrant中仍然缺少这样的选项。有关功能请求,请参阅GitHub:https://github.com/mitchellh/vagrant/issues/5355。
幸运的是,通过Vagrantfile很容易解决这个限制。毕竟它只是Ruby。
vcj
答案 1 :(得分:1)
Vagrant现在允许您传递run: "never"
选项供应商。您仍然可以使用vagrant provision --provision-with <name>
手动运行配置,或者传入--provision --provision-with <name>
标志。
因此,对于此配置,您将运行vagrant provision --provision-with otherScript
:
config.vm.provision "otherScript", type: "shell", run: "never" do |s|
s.privileged = false
s.inline = "bash /path/to/my/other/script.sh"
end
注意:您必须手动指定供应商的名称,如果不指定类型,则不能仅依赖于给定的默认名称。例如,vagrant provision --provision-with shell
将无法使用此配置:
config.vm.provision "shell", run: "never" do |s|
s.privileged = false
s.inline = "bash script.sh"
end