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

"""
You will need the boxes:

 * hashicorp/precise64
 * vEOS-4.15.2F - https://eos.arista.com/using-veos-with-vagrant-and-virtualbox/
 * IOSXRv-5.3.0 - https://www.dravetech.com/blog/2016/01/14/vagrant_box_ios_xr.html
 * JunOS - juniper/ffp-12.1X47-D20.7-packetmode
    * To provision and test JunOS first you have to add the ssh vagrant ssh key into the ssh-agent. I.e.:
        ssh-add /opt/vagrant/embedded/gems/gems/vagrant-1.7.4/keys/vagrant
  * csr100v
  * VyOS - higebu/vyos-1.1.7-amd64

For running unittests always start the base box and the box you want to test:

    vagrant up base

"""

Vagrant.configure(2) do |config|
  config.vbguest.auto_update = false

  config.vm.define "base" do |base|
    base.vm.box = "hashicorp/precise64"
    base.vm.network "private_network", virtualbox__intnet: "link_1", ip: "10.0.1.100"
    base.vm.network "private_network", virtualbox__intnet: "link_2", ip: "10.0.2.100"

    base.vm.provision "shell", inline: <<-SHELL
      sudo apt-get update
      sudo apt-get install lldpd -y
    SHELL
  end

  config.vm.define "eos" do |eos|
    eos.vm.box = "vEOS-lab-4.15.2.1F"

    eos.vm.network :forwarded_port, guest: 443, host: 12443, id: 'https'

    eos.vm.network "private_network", virtualbox__intnet: "link_1", ip: "169.254.1.11", auto_config: false
    eos.vm.network "private_network", virtualbox__intnet: "link_2", ip: "169.254.1.11", auto_config: false
  end

  config.vm.define "iosxr" do |iosxr|
    iosxr.vm.box = "IOSXRv-5.3.0"

    iosxr.vm.network :forwarded_port, guest: 22, host: 12202, id: 'ssh'

    iosxr.vm.network "private_network", virtualbox__intnet: "link_1", ip: "169.254.1.11", auto_config: false
    iosxr.vm.network "private_network", virtualbox__intnet: "link_2", ip: "169.254.1.11", auto_config: false
  end

  config.vm.define "junos" do |junos|
    junos.vm.box = "juniper/ffp-12.1X47-D20.7-packetmode"

    junos.vm.network :forwarded_port, guest: 22, host: 12203, id: 'ssh'

    junos.vm.network "private_network", virtualbox__intnet: "link_1", ip: "169.254.1.11", auto_config: false
    junos.vm.network "private_network", virtualbox__intnet: "link_2", ip: "169.254.1.11", auto_config: false
  end

  config.vm.define "ios" do |ios|
    ios.vm.box = "csr1000v"

    ios.vm.network :forwarded_port, guest: 22, host: 12204, id: 'ssh'

    ios.vm.network "private_network", virtualbox__intnet: "link_1", ip: "169.254.1.11", auto_config: false
    ios.vm.network "private_network", virtualbox__intnet: "link_2", ip: "169.254.1.11", auto_config: false
  end

  config.vm.define "ros" do |ros|
    # Download from https://drive.google.com/open?id=0B7lhzJhvsd-8dFB0NnNFUm52cjA
    ros.vm.box = "chr-6.37.4"
    ros.vm.network :forwarded_port, guest: 22, host: 12205, id: 'ssh'
    ros.vm.network :forwarded_port, guest: 8728, host: 8728, id: 'api'
    ros.vm.network :forwarded_port, guest: 8729, host: 8729, id: 'apissl'
    ros.ssh.username = 'admin'
    ros.ssh.password = ''
    ros.ssh.insert_key = false
    config.vm.synced_folder ".", "/vagrant", :disabled => true
  end

  config.vm.define "vyos" do |vyos|
    vyos.vm.box = "higebu/vyos"

    vyos.vm.network :forwarded_port, guest: 22, host: 12206, id: 'ssh'

    vyos.vm.network "private_network", virtualbox__intnet: "link_1", ip: "169.254.1.11", auto_config: false
    vyos.vm.network "private_network", virtualbox__intnet: "link_2", ip: "169.254.1.11", auto_config: false
  end

end
