【问题标题】:Vagrantfile with multiple vm and providers具有多个 vm 和提供程序的 Vagrantfile
【发布时间】:2018-09-27 11:46:42
【问题描述】:

我正在尝试使用由多个提供商备份的多台机器编写 Vagrantfile。我特别希望能够一次生成不止一台这样的机器。基本上我想运行命令: vagrant up vb_vm aws_vm

我知道 --provider 标志,但这将适用于 所有 正在生成的机器,因此不适用于我的情况。

这是我的(非常精简但仍然有效的)Vagrantfile:

Vagrant.configure(2) do |config|

  config.vm.define 'vb_vm' do |vb_vm|
    vb_vm.vm.box='ubuntu/trusty64' # from hashicorp

    vb_vm.vm.provider :virtualbox do |v|
    end
  end

  config.vm.define 'aws_vm' do |aws_vm|
    aws_vm.vm.box = "aws/dummy"
    aws_vm.vm.box_url = 'https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box'

    aws_vm.vm.provider :aws do |a, override|
      a.access_key_id = 'something'
      a.secret_access_key = 'something'
      a.ami='something'
    end
  end
end

vagrant box list 表明用于每个定义的框类型正确:

aws/dummy        (aws, 0)
ubuntu/trusty64  (virtualbox, 20150928.0.0)

但是vagrant status 给了我(请注意,我确实有可用的 lxc 插件,它已成为默认插件)

当前机器状态:

aws_vm                    not created (aws)
vb_vm                     not created (lxc)

所以这说明用多个provider生成多台机器确实是可能的,但是provider的选择是错误的。

我知道设置默认提供程序的技巧,但这只会让事情变得更糟(到处都使用虚拟机,根本不使用aws...)

我也知道旧的 stackoverflow 问题,但它们与更旧版本的 Vagrant 有关。

所以问题是:我如何确保定义的每个框都使用其正确的提供者?

【问题讨论】:

    标签: amazon-web-services vagrant


    【解决方案1】:

    诀窍是使用他们自己的提供程序创建 VM。

    示例:我已经为每个提供者定义了一个带有框的快速 Vagrantfile(最小化)

    Vagrant.configure(2) do |config|
      config.vm.define "db" do |db|
        db.vm.box = "..."
        db.vm.hostname = "db"
      end
    
      config.vm.define "app", primary: true do |app|
        app.vm.box = "..."
        app.vm.hostname = "app"
    
        app.ssh.forward_agent = true
        app.ssh.forward_x11 = true
    
        app.vm.provider "vmware_fusion" do |vm|
          vm.vmx["memsize"] = "4096"
        end
      end
    end
    

    我分别创建每个虚拟机

    fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up db --provider=virtualbox
    Bringing machine 'db' up with 'virtualbox' provider...
    ....
    fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up app
    Bringing machine 'app' up with 'vmware_fusion' provider...
    ....
    

    然后我停止一切,下次我这样做vagrant up

    fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up
    Bringing machine 'db' up with 'virtualbox' provider...
    Bringing machine 'app' up with 'vmware_fusion' provider...
    

    状态看起来不错

    fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant status
    Current machine states:
    
    db                        running (virtualbox)
    app                       running (vmware_fusion)
    
    This environment represents multiple VMs. The VMs are all listed
    above with their current state. For more information about a specific
    VM, run `vagrant status NAME`.
    

    【讨论】:

    • 这就是我害怕的。在某一时刻,即使为正确的提供者定义了该框,您也需要添加 --provider。但是停止/启动有用的技巧,谢谢!
    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 2021-06-01
    • 2023-03-22
    • 2014-01-11
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多