Vagrantfile

Summary

Maintainability
Test Coverage
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 2.2.7"

require "json"
require "time"

devconfig = JSON.parse(File.read("config/vagrant/devconfig.json"))

def setup_host
  return unless ["up", "resume", "ssh", "reload"].include? ARGV[0]

  if !(`netstat -nr`.include? "198.38.")
    puts "Adding routes to host computer..."
    if RUBY_PLATFORM =~ /darwin/
      cmd = "sudo route add 198.38.24.0/21 198.38.22.126"
    elsif RUBY_PLATFORM =~ /mingw/
     cmd = "route add 198.38.24.0 mask 255.255.248.0 198.38.22.126"
    else
      cmd = "sudo route add -net 198.38.24.0 gw 198.38.22.126 netmask 255.255.248.0"
    end
    puts cmd
    exit if !system(cmd)
    if RUBY_PLATFORM =~ /mingw/
     pingcmd = "ping -n 1 198.38.27.6"
    else
     pingcmd = "ping -c1 198.38.27.6"
    end
    if !system(pingcmd)
      puts "Can not reach KDC for LOCAL.TJHSST.EDU realm. Try toggling VPN and deleting and re-adding the route."
      exit
    end
  end
end

# Make sure the host computer is set up every time a vagrant command is run
if devconfig["use_vpn"]
    setup_host
end


Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2004"
  config.vm.boot_timeout = 1000
  if devconfig["use_vpn"]
      config.vm.network "public_network", bridge: devconfig["network_interface"]
  end
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 5555, host: 5555

  config.ssh.forward_agent = true

  config.vm.hostname = "ionvm"

  config.vm.define "ion-vagrant" do |v|
  end

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
    vb.name = "ion-vagrant"
    vb.memory = 2048 # the default of 512 gives us a OOM during setup.
    vb.gui = false
  end



  config.vm.network :private_network, ip: '192.168.56.50'
  if devconfig["use_nfs"]
      config.vm.synced_folder ".", "/home/vagrant/intranet", type: :nfs, nfs_udp: false
      config.nfs.map_uid = Process.uid
      config.nfs.map_gid = Process.gid
  else
      config.vm.synced_folder ".", "/home/vagrant/intranet"
  end

  config.vm.provision "file",
    source: "~/.ssh/#{devconfig['ssh_key']}",
    destination: ".ssh/#{devconfig['ssh_key']}"

  config.vm.provision "file",
    source: "~/.ssh/#{devconfig['ssh_key']}.pub",
    destination: ".ssh/#{devconfig['ssh_key']}.pub"

  config.vm.provision "shell", path: "config/vagrant/provision_vagrant.sh"

  config.ssh.username = "vagrant"
end