#!/usr/bin/env ruby

require 'yaml'

PLAYBOOK = 'test.yml'
CONFIGURATION_FILE = 'boxes.yml'

Vagrant.configure('2') do |config|

  # overcome 'stdin: is not a tty' errors when trying to provision on vivid64
  config.ssh.pty = true
  config.ssh.shell = 'bash'

  # puts "[DEBUG] loading box settings from #{CONFIGURATION_FILE}..."
  vagrant_environment = YAML.load_file(File.expand_path(CONFIGURATION_FILE, File.dirname(__FILE__)))

  vagrant_environment['vagrant'].each do |box_name, box_settings|
    if not box_settings['enabled']
        # puts "[DEBUG] #{box_name} is not enabled. skipping..."
        next
    end

    # puts "[DEBUG] applying #{box_name} settings..."
    config.vm.define box_name do |host|

      host.vm.box = box_settings['box'] unless not box_settings.key? 'box'

      host.vm.network box_settings['network']['name'], ip: box_settings['network']['ip'] unless box_settings.key? 'network'
      host.vm.synced_folder '.', '/vagrant', disabled: true

      # puts "[DEBUG] applying virtualbox settings for #{box_name} box..."
      customize_args = [ "modifyvm", :id ]
      box_settings['provider']['virtualbox'].collect { |k, v| customize_args |= ["--#{k}", v.to_s] }
      host.vm.provider 'virtualbox' do |vb|
        vb.customize customize_args
      end

      # puts "[DEBUG] provision using ansible vagrant playbook..."
      host.vm.provision 'ansible' do |ansible|

        ansible.host_vars = {
            'xenial64.vagrant.dev' => {
                'ansible_python_interpreter' => '/usr/bin/python2.7',
                'playbook_python2' => true
            },
            'yakkety64.vagrant.dev' => {
                'ansible_python_interpreter' => '/usr/bin/python2.7',
                'playbook_python2' => true
            }
        }

        ansible.playbook = PLAYBOOK
        ansible.verbose = 'v'
        ansible.skip_tags = 'test'
        ansible.extra_vars = {
            'env': 'vagrant',
            'vagrant_box': "#{box_name}"
        }
      end
    end
  end
end
