【问题标题】:In Vagrant, can I set a provisioner to only ever run manually?在 Vagrant 中,我可以将配置器设置为仅手动运行吗?
【发布时间】:2015-06-22 03:31:12
【问题描述】:

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

有没有办法做到这一点?要设置仅在我手动调用时才运行的配置器?

【问题讨论】:

  • shell 配置器看起来只支持两种运行模式:一次(默认)或总是,所以我认为您发布的问题的答案是“不,不可能”。你想用这个来完成什么?可能有一些替代解决方案可以达到相同的结果。
  • 我同意@BrianC,如果你绝对需要它只能手动运行,那么通过 SSH 连接到盒子然后执行脚本有什么问题?
  • 是的,这就是我的想法。我只是找不到任何其他文档。我已经在编写一个 ssh 脚本来运行我的脚本。谢谢。

标签: vagrant vagrantfile vagrant-windows


【解决方案1】:

当您需要一个复杂的任务在整个团队中可用、可重复和可重现时(例如需要时将数据库重置为全新状态。

不幸的是,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

【讨论】:

  • 哦,我其实很喜欢这条路线。至少,在正式发布或实现该功能请求之前。虽然我最近没有经常使用 vagrant,但我在工作中使用它,所以这会很方便。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2020-01-18
    相关资源
    最近更新 更多