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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

$initi = <<SCRIPT
apt-get update
apt-get install -y wget git unzip
apt-get clean && apt-get purge
SCRIPT

$odl = <<SCRIPT
  #Install dependencies needed for running OpenDaylight
  sudo apt-get install software-properties-common -y
  sudo add-apt-repository ppa:openjdk-r/ppa -y
  sudo apt-get update
  sudo apt-get install openjdk-8-jdk -y
  sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
  export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
  export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:\$JAVA_HOME/bin

  ## Run OpenDaylight Karaf
  wget -O odl.tar.gz https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.5.2-Boron-SR2/distribution-karaf-0.5.2-Boron-SR2.tar.gz
  tar -xvzf odl.tar.gz
SCRIPT

$ovs_nsh = <<SCRIPT
  #Clone the NSH aware OVS implementation and install it
  wget https://raw.githubusercontent.com/yyang13/ovs_nsh_patches/master/start-ovs-deb.sh
  sudo chmod 777 /home/vagrant/start-ovs-deb.sh
  /home/vagrant/start-ovs-deb.sh
SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "trusty-server-cloudimg-amd64"
  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.provider :virtualbox do |v|
    v.customize ["modifyvm", :id, "--memory", 1024]
    v.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
  end

  config.vm.define "classifier1" do | h |
    h.vm.host_name = "classifier1"
    h.vm.network :private_network, ip: "10.10.1.10"
    h.vm.provision "shell", inline: $initi
    h.vm.provision "shell", inline: $ovs_nsh
  end

  config.vm.define "classifier2" do | h |
    h.vm.host_name = "classifier2"
    h.vm.network :private_network, ip: "10.10.1.60"
    h.vm.provision "shell", inline: $initi
    h.vm.provision "shell", inline: $ovs_nsh
  end

  config.vm.define "sff1" do | h |
    h.vm.host_name = "sff1"
    h.vm.network :private_network, ip: "10.10.1.20"
    h.vm.provision "shell", inline: $initi
    h.vm.provision "shell", inline: $ovs_nsh
  end

  config.vm.define "sff2" do | h |
    h.vm.host_name = "sff2"
    h.vm.network :private_network, ip: "10.10.1.50"
    h.vm.provision "shell", inline: $initi
    h.vm.provision "shell", inline: $ovs_nsh
  end


  config.vm.define "odl" do | h |
    h.vm.host_name = "odl"
    h.vm.network :private_network, ip: "10.10.1.5"
    h.vm.provider :virtualbox do |v|
      v.customize ["modifyvm", :id, "--memory", 4096]
      v.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
    end
    h.vm.provision "shell", inline: $initi
    h.vm.provision "shell", privileged: false, inline: $odl
  end
end
