在我的 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)这样的东西,但是我必须在团队中的所有计算机上进行设置。我可以用脚本进行设置,但我认为如果可能的话,这可能会更容易。
有没有办法做到这一点?要设置仅在我手动调用时才运行的配置程序?
当您需要在整个团队中提供、可重复和可重现的复杂任务时,需要手动/按需/显式配置器是合理的,例如在需要时将数据库重置为零
。不幸的是,流浪者仍然直接缺少这种选择。有关功能请求,请参阅 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
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