Vagrant 有条件地调用文件中的不同规定

Vagrant 有条件地调用文件中的不同规定,vagrant,vagrantfile,Vagrant,Vagrantfile,我在流浪汉档案中设置了以下条款 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 => "

我在流浪汉档案中设置了以下条款

 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"
provision/bootstrap.sh
需要始终运行,但是我需要有条件地运行其余的provision。例如,如果
dev
模式,则运行
provision/dev setup.sh

是否有一些内置的流浪者配置设置来实现这一点?(比如将命令行参数传递给
vagrant provision


如果可能的话,我不想依赖环境变量。

我认为环境变量是处理这个问题最常用的方法,没有一种方法可以通过
vagrant up
vagrant provision
命令传递任何信息。以下是您可以探索的几个备选方案:

  • 在Dev和Prod环境中有一些不同的东西。Vagrantfile只是一个Ruby脚本,因此可以检测到的任何内容都可以用来控制配置脚本序列。例如,是否存在文件、本地网络、主机名等

  • 定义不同的流浪节点,这些节点实际上是相同的,但根据资源调配的不同而有所不同。例如,对于以下文件,您可以根据您的环境执行
    vagrant up prod
    vagrant 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
    

  • 您还可以在资源清册中创建一个新变量来保存环境,例如dev资源清册中的
    env:dev
    和prod资源清册中的
    env:production
    ,然后使用该变量有条件地包含您的单个任务文件,如下所示:

    # provision.yml (your main playbook)
    
    - include: provision/bootstrap.sh
    - include: provision/step-1.sh
    - include: provision/step-2.sh
    - include: provision/dev-setup.sh
      when: env == 'dev'
    
    然后在Vagrant中,您可以指定要使用的库存,例如:

    config.vm.provision "provision", type: "ansible" do |ansible|
        ansible.playbook = 'provision.yml'
        ansible.inventory_path = 'inventory/dev'
    end
    
    更多信息: