Vagrant.configure(2) do |config|

  # Creates a salt master that we can use to test out different test and build
  # scenarios locally before we set up the "CD" system.
  config.vm.define 'master' do |vagrant|
    vagrant.vm.hostname = 'master'
    vagrant.vm.network :private_network, ip: '172.16.100.5'

    # Do not use a shared folder. We will fetch sources in other ways.
    # This allows us (eventually) to export the VM and move it around.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    # The salt master actually needs some RAM in order to transfer large files.
    vagrant.vm.box = 'ubuntu-14-04-x64-vmware'
    vagrant.vm.box_url = 'boxes/ubuntu-14-04-x64-vmware.box'

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '2048'
      v.vmx['numvcpus'] = '2'
    end

    vagrant.vm.provision :shell, path: "shell/install_jenkins.sh"
    vagrant.vm.provision :shell, path: "shell/install_rvm_jenkins.sh"
    vagrant.vm.provision :shell, path: "shell/install_build_dependencies.sh"
    vagrant.vm.provision :shell, path: "shell/install_nginx.sh"
    vagrant.vm.provision :shell, path: "shell/install_perforce-server.sh"
  end

  # The build environment expects to be managed by the 'master' VM already
  # configured.
  config.vm.define 'build-ubuntu12' do |vagrant|
    vagrant.vm.hostname = 'build-ubuntu12'
    vagrant.vm.box = 'ubuntu-12-04-x64-vmware'
    vagrant.vm.box_url = 'boxes/ubuntu-12-04-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.10'

    # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '4096'
      v.vmx['numvcpus'] = '4'
    end

    vagrant.vm.provision :shell, path: "shell/install_build_dependencies.sh"
    vagrant.vm.provision :shell, path: "shell/install_rvm.sh", args: "stable", privileged: false
    vagrant.vm.provision :shell, path: "shell/install_jdk.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
    vagrant.vm.provision :shell, path: "shell/set_omnibus_perms.sh"
  end

  config.vm.define 'build-ubuntu14' do |vagrant|
    vagrant.vm.hostname = 'build-ubuntu14'
    vagrant.vm.box = 'ubuntu-14-04-x64-vmware'
    vagrant.vm.box_url = 'boxes/ubuntu-14-04-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.11'

    # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '4096'
      v.vmx['numvcpus'] = '4'
    end

    vagrant.vm.provision :shell, path: "shell/install_build_dependencies.sh"
    vagrant.vm.provision :shell, path: "shell/install_rvm.sh", args: "stable", privileged: false
    vagrant.vm.provision :shell, path: "shell/install_jdk.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
    vagrant.vm.provision :shell, path: "shell/set_omnibus_perms.sh"
  end

  config.vm.define 'build-centos6' do |vagrant|
    vagrant.vm.hostname = 'build-centos6'
    vagrant.vm.box = 'centos-6-7-x64-vmware'
    vagrant.vm.box_url = 'boxes/centos-6-7-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.12'

     # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '4096'
      v.vmx['numvcpus'] = '4'
    end
    
    vagrant.vm.provision :shell, path: "shell/install_build_dependencies-centos.sh"
    vagrant.vm.provision :shell, path: "shell/install_rvm.sh", args: "stable", privileged: false
    vagrant.vm.provision :shell, path: "shell/install_jdk-centos.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
    vagrant.vm.provision :shell, path: "shell/set_omnibus_perms.sh"
  end

  config.vm.define 'test-ubuntu12' do |vagrant|
    vagrant.vm.hostname = 'test-ubuntu12'
    vagrant.vm.box = 'ubuntu-12-04-x64-vmware'
    vagrant.vm.box_url = 'boxes/ubuntu-12-04-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.20'

     # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '2096'
      v.vmx['numvcpus'] = '2'
    end
    
    vagrant.vm.provision :shell, path: "shell/update.sh"
    vagrant.vm.provision :shell, path: "shell/install_jdk.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
  end

  config.vm.define 'test-ubuntu14' do |vagrant|
    vagrant.vm.hostname = 'test-ubuntu14'
    vagrant.vm.box = 'ubuntu-14-04-x64-vmware'
    vagrant.vm.box_url = 'boxes/ubuntu-14-04-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.21'

     # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '2096'
      v.vmx['numvcpus'] = '2'
    end

    vagrant.vm.provision :shell, path: "shell/update.sh"
    vagrant.vm.provision :shell, path: "shell/install_jdk.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
  end

  config.vm.define 'test-centos6' do |vagrant|
    vagrant.vm.hostname = 'test-centos6'
    vagrant.vm.box = 'centos-6-7-x64-vmware'
    vagrant.vm.box_url = 'boxes/centos-6-7-x64-vmware.box'

    vagrant.vm.network :private_network, ip: '172.16.100.22'

     # Do not use a shared folder. We will fetch sources in other ways.
    vagrant.vm.synced_folder ".", "/vagrant", disabled: true

    vagrant.vm.provider 'vmware_fusion' do |v|
      v.gui = true
      v.vmx['memsize'] = '2096'
      v.vmx['numvcpus'] = '2'
    end
    
    vagrant.vm.provision :shell, inline: 'iptables -F'
    vagrant.vm.provision :shell, inline: 'yum update -y'
    vagrant.vm.provision :shell, path: "shell/install_jdk-centos.sh"
    vagrant.vm.provision :shell, path: "shell/create_ssh_key.sh", privileged: false
  end  
end