有条件地在Vagrantfile中调用不同的配置

Cod*_*ain 7 vagrant vagrantfile

我在Vagrant文​​件中设置了以下规定.

 config.vm.provision :shell, :path => "provision/bootstrap.sh"
 config.vm.provision :shell, :path => "provision/step-1.sh"
 config.vm.provision :shell, :path => "provision/step-2.sh"
 config.vm.provision :shell, :path => "provision/dev-setup.sh"
Run Code Online (Sandbox Code Playgroud)

provision/bootstrap.sh需要始终运行,但我需要有条件地运行其余的条款.对于Eg.如果是dev模式,运行provision/dev-setup.sh

是否有一些内置的Vagrant配置设置来实现这一目标?(比如传递命令行args vagrant provision)?

我不喜欢靠ENV变量,像这样如果可能的话.

Bri*_*anC 7

我认为环境变量是处理此问题的最常用方法,并且没有办法通过vagrant upor vagrant provision命令传递任何内容.以下是您可以探索的几个替代想法:

  1. 在Dev vs. Prod环境中有其他不同的东西.Vagrantfile只是一个Ruby脚本,因此任何可以检测到的东西都可以用来控制配置脚本序列.例如,文件,本地网络,主机名等的存在/不存在.

  2. 定义单独的Vagrant节点,这些节点实际上是相同的,但根据配置而不同.例如,使用如下文件,您可以执行vagrant up prodvagrant up dev,根据您的环境:

    Vagrant.configure("2") do |config|
      config.vm.provision :shell, :path => "provision/bootstrap.sh"
      config.vm.provision :shell, :path => "provision/step-1.sh"
      config.vm.provision :shell, :path => "provision/step-2.sh"
    
      config.vm.define "prod" do |prod|
        ...
      end
    
      config.vm.define "dev" do |dev|
        ...
        config.vm.provision :shell, :path => "provision/dev-setup.sh"
    
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)