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



在我的 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

相关内容

  • 没有找到相关文章

最新更新