Vagrant.configure("2") do |config|
  vagrant_box = ENV.fetch("VAGRANT_BOX", "ubuntu/trusty64")
  if Vagrant.has_plugin?("vagrant-cachier")
    config.cache.scope = :box
    config.cache.enable :apt
    config.cache.enable :npm
  end

  config.vm.define "database" do |database|
    database.vm.box = vagrant_box
    database.vm.network "private_network", ip: "192.168.33.10"

    database.vm.provision "ansible" do |ansible|
      ansible.playbook = "playbooks/database/site.yml"
      ansible.galaxy_role_file = "playbooks/database/requirements.yml"
    end
  end

  config.vm.define "app" do |app|
    app.vm.box = vagrant_box
    app.vm.network "private_network", ip: "192.168.33.11"
    app.vm.network "forwarded_port", guest: 8080, host: 9080
    app.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", 2048]
    end

    app.vm.provision "ansible" do |ansible|
      ansible.playbook = "playbooks/app/site.yml"
      ansible.galaxy_role_file = "playbooks/app/requirements.yml"
      ansible.extra_vars = {
        "broker_ip" => "192.168.33.12",
        "girder_ip" => "192.168.33.11",
        "mongodb_ip" => "192.168.33.10"
      }
    end
  end

  config.vm.define "queue" do |queue|
    queue.vm.box = vagrant_box
    queue.vm.network "private_network", ip: "192.168.33.12"

    queue.vm.provision "ansible" do |ansible|
      ansible.playbook = "playbooks/queue/site.yml"
      ansible.galaxy_role_file = "playbooks/queue/requirements.yml"
    end
  end

  (1..2).each do |i|
    config.vm.define "worker-#{i}" do |worker|
      worker.vm.box = vagrant_box
      worker.vm.network "private_network", ip: "192.168.33.2#{i}"
      worker.vm.hostname = "worker-#{i}"

      worker.vm.provision "ansible" do |ansible|
        ansible.playbook = "playbooks/worker/site.yml"
        ansible.extra_vars = {
          "broker_ip" => "192.168.33.12"
        }
      end
    end
  end
end
