在Vagrant中,我可以将配置程序设置为仅手动运行吗?

时间:2015-04-15 23:18:53

标签: vagrant vagrantfile vagrant-windows

在我的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)这样的东西但是我必须在我团队中的所有计算机上进行设置。我可以使用脚本进行设置,但我认为如果可能的话,这可能会更容易。

有没有办法实现这个目标?要设置只在我手动调用它时才运行的配置器吗?

2 个答案:

答案 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