# -*- mode: ruby -*-
# vi: set ft=ruby :
# Aby korzystać z tych maszyn wirtualnych, zainstaluj Vagrant i VirtualBox.
# vagrant up [git, jenkins, nexus, sonar]
Vagrant.require_version ">= 2.0.0"
# Wymagany moduł JSON
require 'json'
# Odczytanie pliku JSON zawierającego szczegóły konfiguracyjne
guests = JSON.parse(File.read(File.join(File.dirname(__FILE__), 'config.json')))

# Lokalna zmienna PATH_SRC wykorzystywana do montowania
$PathSrc = ENV['PATH_SRC'] || "."

Vagrant.configure(2) do |config|

  config.vagrant.plugins = ["vagrant-hostmanager", "vagrant-vbguest"]

  # Sprawdzenie aktualizacji bazowego obrazu
  config.vm.box_check_update = true
  # Oczekiwanie przez dłuższą chwilę
  config.vm.boot_timeout = 1200

  # Wyłączenie aktualizacji dodatków Guest Additions
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = false
  end

  # Włączenie przekazywania agenta SSH
  config.ssh.forward_agent = true

  # Zastosowanie standardowego klucza SSH
  config.ssh.insert_key = false

  # Zarządzanie plikiem /etc/hosts
  config.hostmanager.enabled = true
  config.hostmanager.include_offline = true
  config.hostmanager.manage_guest = true
  config.hostmanager.manage_host = true

  # Wyłączenie dodatków Guest Additions
  config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true

  # Przetwarzanie sekcji pliku JSON
  guests.each do |guest|
    config.vm.define guest['name'] do |srv|
      srv.vm.box = guest['box']
      srv.vm.hostname = guest['name']
      srv.vm.network 'private_network', ip: guest['ip_addr']
      srv.vm.network :forwarded_port, host: guest['forwarded_port'], guest: guest['app_port']

      # Ustawienie opcji no_share na false na potrzeby udostępniania plików
      srv.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: guest['no_share']
      srv.vm.provider :virtualbox do |virtualbox|
        virtualbox.customize ["modifyvm", :id,
           "--audio", "none",
           "--cpus", guest['cpus'],
           "--memory", guest['memory'],
           "--graphicscontroller", "VMSVGA",
           "--vram", "64"
        ]
        virtualbox.gui = guest['gui']
        virtualbox.name = guest['name']
      end
    end
  end
  config.vm.provision "ansible" do |ansible|
    ansible.compatibility_mode = "2.0"
    ansible.galaxy_role_file = "roles/requirements.yml"
    ansible.galaxy_roles_path = "roles"
    ansible.groups = {
      "nexus" => ["server04"],
      "jenkins" => ["server05"],
      "git" => ["server0 "],
      "sonar" => ["server07"]
    }
    ansible.extra_vars = {  
      pypi_index_host: "server04"
  }
    ansible.playbook = "playbook.yml"
    ansible.verbose = "vv"
  end
end
