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

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

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
	# All Vagrant configuration is done here. The most common configuration
	# options are documented and commented below. For a complete reference,
	# please see the online documentation at vagrantup.com.

	# Every Vagrant virtual environment requires a box to build off of.
	config.vm.box = "ubuntu/trusty64"

	# Disable automatic box update checking. If you disable this, then
	# boxes will only be checked for updates when the user runs
	# `vagrant box outdated`. This is not recommended.
	# config.vm.box_check_update = false

	# Create a forwarded port mapping which allows access to a specific port
	# within the machine from a port on the host machine. In the example below,
	# accessing "localhost:8080" will access port 80 on the guest machine.
	# config.vm.network "forwarded_port", guest: 80, host: 8080

	# Create a private network, which allows host-only access to the machine
	# using a specific IP.
	# config.vm.network "private_network", ip: "192.168.33.10"

	# Create a public network, which generally matched to bridged network.
	# Bridged networks make the machine appear as another physical device on
	# your network.
	config.vm.network "public_network"

	# If true, then any SSH connections made will enable agent forwarding.
	# Default value: false
	config.ssh.forward_agent = true

	# Share an additional folder to the guest VM. The first argument is
	# the path on the host to the actual folder. The second argument is
	# the path on the guest to mount the folder. And the optional third
	# argument is a set of non-required options.
	config.vm.synced_folder "data", '/data'
	config.vm.synced_folder "build", '/build'

	# Provider-specific configuration so you can fine-tune various
	# backing providers for Vagrant. These expose provider-specific options.
	# Example for VirtualBox:
	#
	config.vm.provider "virtualbox" do |vb|
	#   # Don't boot with headless mode
	#   vb.gui = true
	#
	#   # Use VBoxManage to customize the VM. For example to change memory:
		vb.customize ["modifyvm", :id, "--memory", "2048"]
	end
	#
	# View the documentation for the provider you're using for more
	# information on available options.

	# Enable provisioning with chef solo, specifying a cookbooks path, roles
	# path, and data_bags path (all relative to this Vagrantfile), and adding
	# some recipes and/or roles.
	#
	config.vm.provision "chef_solo" do |chef|
		chef.cookbooks_path = "./chef/cookbooks"
		chef.roles_path = "./chef/roles"
		chef.data_bags_path = "./chef/data_bags"

		chef.add_recipe 'nmap'
		chef.add_recipe 'mysql::server'
		chef.add_recipe 'mysql::client'
		chef.add_recipe 'tomcat'
		chef.add_recipe 'tomcat::users' # Currently broken :( https://github.com/opscode-cookbooks/tomcat/pull/79
		pw = "MySQLpassword"
		chef.json = {
			java: {
				install_flavor: 'oracle',
				jdk_version: 8,
				oracle: {
					accept_oracle_download_terms: true
				}
			},
			tomcat: {
				base_version: 7,
				proxy_port: 80,
				# ssl_port: 443,
				authbind: 'yes'
			},
			mysql: {
				version: '5.6',
				server_root_password: pw,
				server_debian_password: pw,
				server_repl_password: pw,
				allow_remote_root: true
			}
		}
	end

	require 'fileutils'
	build_dir = 'build'
	# Remove existing cached artifacts.
	Dir.glob(File.join(build_dir, '*.war')).each do |f|
		FileUtils.rm(f)
	end
	# Cache new copies.
	Dir.glob(File.join('..', '**', 'target', '*.war')).each do |f|
		FileUtils.cp(f, 'build')
	end

	# puts "Deploying any/all built .war files.""
	config.vm.provision 'shell', inline: 'cp /build/*.war /var/lib/tomcat7/webapps'

	# puts "Setting MySQL to start automatically at boot, and (re)starting the daemon."
	config.vm.provision 'shell', inline: 'update-rc.d mysql defaults'
	config.vm.provision 'shell', inline: 'service mysql restart'

	# puts "The VM network interfaces are configured as follows..."
	config.vm.provision 'shell', inline: 'ifconfig'

end
