# -*- mode: ruby -*-
# vi: set ft=ruby :

require 'yaml'

vagrant_config = YAML.load_file("provisioning/virtualbox.conf.yml")

Vagrant.configure(2) do |config|
  config.vm.box = vagrant_config['box']

  if Vagrant.has_plugin?("vagrant-cachier")
    # Configure cached packages to be shared between instances of the same base box.
    # More info on http://fgrehm.viewdocs.io/vagrant-cachier/usage
    config.cache.scope = :box
  end

  config.vm.synced_folder '..', '/dragonflow'

  # Bring up the Devstack controller node on Virtualbox
  config.vm.define "devstack_controller" do |devstack_controller|
    devstack_controller.vm.host_name = vagrant_config['devstack_controller']['host_name']
    devstack_controller.vm.network "private_network", ip: vagrant_config['devstack_controller']['ip']
    devstack_controller.vm.provision "shell", path: "provisioning/setup-base.sh", privileged: false
    devstack_controller.vm.provision "shell", path: "provisioning/setup-controller.sh", privileged: false

    config.vm.provider "virtualbox" do |vb|
       vb.memory = vagrant_config['devstack_controller']['memory']
       vb.cpus = vagrant_config['devstack_controller']['cpus']
    end
    config.vm.provider 'parallels' do |vb, override|
       vb.memory = vagrant_config['devstack_controller']['memory']
       vb.cpus = vagrant_config['devstack_controller']['cpus']
       vb.customize ['set', :id, '--nested-virt', 'on']
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
    config.vm.provider 'libvirt' do |vb, override|
       vb.memory = vagrant_config['devstack_controller']['memory']
       vb.cpus = vagrant_config['devstack_controller']['cpus']
       vb.nested        = true
       vb.graphics_type = 'spice'
       vb.video_type    = 'qxl'
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
  end

  # Bring up the Devstack compute nodes on Virtualbox
  config.vm.define "devstack_compute1" do |devstack_compute1|
    devstack_compute1.vm.host_name = vagrant_config['devstack_compute1']['host_name']
    devstack_compute1.vm.network "private_network", ip: vagrant_config['devstack_compute1']['ip']
    devstack_compute1.vm.provision "shell", path: "provisioning/setup-base.sh", privileged: false
    devstack_compute1.vm.provision "shell", path: "provisioning/setup-compute.sh", privileged: false, :args => "#{vagrant_config['devstack_controller']['ip']}"
    config.vm.provider "virtualbox" do |vb|
       vb.memory = vagrant_config['devstack_compute1']['memory']
       vb.cpus = vagrant_config['devstack_compute1']['cpus']
    end
    config.vm.provider 'parallels' do |vb, override|
       vb.memory = vagrant_config['devstack_compute1']['memory']
       vb.cpus = vagrant_config['devstack_compute1']['cpus']
       vb.customize ['set', :id, '--nested-virt', 'on']
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
    config.vm.provider 'libvirt' do |vb, override|
       vb.memory = vagrant_config['devstack_compute1']['memory']
       vb.cpus = vagrant_config['devstack_compute1']['cpus']
       vb.nested        = true
       vb.graphics_type = 'spice'
       vb.video_type    = 'qxl'
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
  end

  config.vm.define "devstack_compute2" do |devstack_compute2|
    devstack_compute2.vm.host_name = vagrant_config['devstack_compute2']['host_name']
    devstack_compute2.vm.network "private_network", ip: vagrant_config['devstack_compute2']['ip']
    devstack_compute2.vm.provision "shell", path: "provisioning/setup-base.sh", privileged: false
    devstack_compute2.vm.provision "shell", path: "provisioning/setup-compute.sh", privileged: false, :args => "#{vagrant_config['devstack_controller']['ip']}"
    config.vm.provider "virtualbox" do |vb|
       vb.memory = vagrant_config['devstack_compute2']['memory']
       vb.cpus = vagrant_config['devstack_compute2']['cpus']
    end
    config.vm.provider 'parallels' do |vb, override|
       vb.memory = vagrant_config['devstack_compute2']['memory']
       vb.cpus = vagrant_config['devstack_compute2']['cpus']
       vb.customize ['set', :id, '--nested-virt', 'on']
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
    config.vm.provider 'libvirt' do |vb, override|
       vb.memory = vagrant_config['devstack_compute2']['memory']
       vb.cpus = vagrant_config['devstack_compute2']['cpus']
       vb.nested        = true
       vb.graphics_type = 'spice'
       vb.video_type    = 'qxl'
       override.vm.box = ENV.fetch('VAGRANT_OVN_VM_BOX', 'boxcutter/ubuntu1404')
    end
  end
end
