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

ENV['VAGRANT_NO_PARALLEL'] = 'yes'

VAGRANT_BOX         = "generic/ubuntu2204"
VAGRANT_BOX_VERSION = "4.3.12"
CPUS_MASTER_NODE    = 2
CPUS_WORKER_NODE    = 4
MEMORY_MASTER_NODE  = 2048
#MEMORY_MASTER_NODE  = 4096
MEMORY_WORKER_NODE  = 4096
#MEMORY_WORKER_NODE  = 8192
WORKER_NODES_COUNT  = 3


Vagrant.configure(2) do |config|

  config.vm.provision "shell", path: "bootstrap.sh"

  # Kubernetes Master Server
  config.vm.define "kmaster" do |node|

    node.vm.box               = VAGRANT_BOX
    node.vm.box_check_update  = false
    node.vm.box_version       = VAGRANT_BOX_VERSION
    node.vm.hostname          = "kmaster.home.lab"

    # node.vm.network "private_network", ip: "172.16.16.100"
    node.vm.network :public_network,
      :network_name => "bridged-network",
      :dev => "br0",
      :mode => "bridge",
      :type => "bridge",
      :ip => "192.168.0.21"



    #node.vm.provider :virtualbox do |v|
    #  v.name    = "kmaster"
    #  v.memory  = MEMORY_MASTER_NODE
    #  v.cpus    = CPUS_MASTER_NODE
    #end

    node.vm.provider :libvirt do |libvirt|
      libvirt.memory  = MEMORY_MASTER_NODE
      libvirt.nested  = true
      libvirt.cpus    = CPUS_MASTER_NODE
      libvirt.storage_pool_path = '/srv/vms'
      libvirt.storage :file, :size => '20G', :type => 'qcow2'
    end

    node.vm.provision "shell", path: "bootstrap_kmaster.sh"

  end


  # Kubernetes Worker Nodes
  (1..WORKER_NODES_COUNT).each do |i|

    config.vm.define "kworker#{i}" do |node|

      node.vm.box               = VAGRANT_BOX
      node.vm.box_check_update  = false
      node.vm.box_version       = VAGRANT_BOX_VERSION
      node.vm.hostname          = "kworker#{i}.home.lab"

      # node.vm.network "private_network", ip: "192.168.0." + (20+i).to_s"
      node.vm.network :public_network,
      :network_name => "bridged-network",
      :dev => "br0",
      :mode => "bridge",
      :type => "bridge",
      :ip => "192.168.0." + (21+i).to_s


      #node.vm.provider :virtualbox do |v|
      #  v.name    = "kworker#{i}"
      #  v.memory  = MEMORY_WORKER_NODE
      #  v.cpus    = CPUS_WORKER_NODE
      #end

      node.vm.provider :libvirt do |libvirt|
        libvirt.memory   = MEMORY_WORKER_NODE
        libvirt.nested   = true
        libvirt.cpus     = CPUS_WORKER_NODE
        libvirt.storage_pool_path = '/srv/vms'
        libvirt.storage :file, :size => '50G', :type => 'qcow2'
        # libvirt.storage :file, :size => '50G', :type => 'qcow2'
      end

      node.vm.provision "shell", path: "bootstrap_kworker.sh"

    end

  end

end