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

# Define the northern.tech root folder which contains the CFengine source code
# Expected subfolders: {core,masterfiles,enterprise,nova}
if ENV['NTECH_ROOT']
    NTECH_ROOT=ENV['NTECH_ROOT']
else
    NTECH_ROOT="/northern.tech"
end

if ENV['DISTRO']
    DISTRO=ENV['DISTRO']
else
    DISTRO="debian/buster64"
end

# Environment variables to define if source needs to be compiled or not
BUILD_ALL=ENV['BUILD_ALL'] ? ENV['BUILD_ALL'] : 1
BUILD_CORE=ENV['BUILD_CORE'] ? ENV['BUILD_CORE'] : BUILD_ALL
BUILD_ENTERPRISE=ENV['BUILD_ENTERPRISE'] ? ENV['BUILD_ENTERPRISE'] : BUILD_ALL
BUILD_MASTERFILES=ENV['BUILD_MASTERFILES'] ? ENV['BUILD_MASTERFILES'] : BUILD_ALL
BUILD_NOVA=ENV['BUILD_NOVA'] ? ENV['BUILD_NOVA'] : BUILD_ALL
BUILD_MP=ENV['BUILD_MP'] ? ENV['BUILD_MP'] : BUILD_ALL
SETUP_MP=ENV['SETUP_MP'] ? ENV['SETUP_MP'] : BUILD_MP

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

# All Vagrant configuration is done below.
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    # disable default synced folder
    config.vm.synced_folder ".", "/vagrant", type: "rsync", disabled: true

    # hub machine
    config.vm.define :hub do |hub|
        hub.vm.box = DISTRO
        hub.vm.hostname = "hub"
        hub.vm.network "private_network", ip: "192.168.100.90"
        hub.vm.network :forwarded_port, guest: 443, host: 8443

        # ssh settings
        hub.ssh.forward_agent = true

        # synced folders
        hub.vm.synced_folder ".", "/northern.tech/cfengine/mission-portal", type: :rsync,
            rsync__auto: true,
            rsync__args: ["--verbose", "--archive", "-z"]

        hub.vm.synced_folder NTECH_ROOT + "/cfengine/enterprise", "/northern.tech/cfengine/enterprise", type: :rsync,
            rsync__auto: true,
            rsync__args: ["--verbose", "--archive", "-z"]

        hub.vm.synced_folder NTECH_ROOT + "/cfengine/core", "/northern.tech/cfengine/core", type: :rsync,
            rsync__auto: true,
            rsync__args: ["--verbose", "--archive", "-z"]

        hub.vm.synced_folder NTECH_ROOT + "/cfengine/masterfiles", "/northern.tech/cfengine/masterfiles", type: :rsync,
            rsync__auto: true,
            rsync__args: ["--verbose", "--archive", "-z"]

        hub.vm.synced_folder NTECH_ROOT + "/cfengine/nova", "/northern.tech/cfengine/nova", type: :rsync,
            rsync__auto: true,
            rsync__args: ["--verbose", "--archive", "-z"]

        # bootstrap script
        hub.vm.provision :shell do |s|
            s.path = "scripts/bootstrap.sh"
            s.env = {
                "HUB_IP" => "192.168.100.90",
                "BUILD_ALL" => BUILD_ALL,
                "BUILD_CORE" => BUILD_CORE,
                "BUILD_ENTERPRISE" => BUILD_ENTERPRISE,
                "BUILD_MASTERFILES" => BUILD_MASTERFILES,
                "BUILD_NOVA" => BUILD_NOVA,
                "BUILD_MP" => BUILD_MP,
                "SETUP_MP" => SETUP_MP,
            }
        end

        # virtualbox settings
        config.vm.provider "virtualbox" do |vb|
            vb.memory = 2048 # 1 GiB of memory
            vb.cpus = 1      # 1 CPU Cores
        end

        # libvirt settings
        config.vm.provider :libvirt do |vb|
            vb.memory = 2048 # 1 GiB of memory
            vb.cpus = 1      # 1 CPU Cores
        end
    end
end
