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

# Require YAML module
require 'yaml'

# Read YAML file with box and network details
inventory = YAML.load_file('inventory/hosts')
user = ENV['USER']
users_vars = inventory['all']['vars']['users_vars']
if users_vars[user]
  dict_name = user
else
  dict_name = 'gitlab-runner'
end
user_vars = inventory['all']['vars']['users_vars'][dict_name]

Vagrant.configure("2") do |config|
  # loop on **all** host(s) in linux_servers group in inventory to create VM(s)
  inventory['all']['children']['linux_servers']['hosts'].each do |server,details|

    # The time in seconds that Vagrant will wait for the machine to gracefully halt when vagrant halt is called.
    # https://developer.hashicorp.com/vagrant/docs/vagrantfile/machine_settings#config-vm-graceful_halt_timeout
    config.vm.graceful_halt_timeout = 120

    config.vm.define server, autostart: false do |srv|
      srv.vm.box = details['box']
      srv.vm.box_version = details['box_version']
      srv.vm.hostname = server

      # mgmt
      # libvirt__forward_mode: "route" mean:
      # Allow inbound, but only to our expected subnet. Allow outbound, but
      # only from our expected subnet. Allow traffic between guests. Deny
      # all other inbound. Deny all other outbound.
      srv.vm.network "private_network",
                     :libvirt__network_name => user_vars['networks'][0]['name'],
                     :ip => user_vars['vms'][server]['ip'],
                     :netmask => user_vars['vms'][server]['netmask'],
                     :libvirt__dhcp_enabled => false,
                     :libvirt__forward_mode => user_vars['networks'][0]['forward_mode']

      srv.vm.provider "libvirt" do |v|
        v.cpus = details['cpus']
        v.memory = details['memory']
      end
    end
  end
end
