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

ENV['VAGRANT_NO_PARALLEL'] = 'yes'

Vagrant.configure("2") do |config|
  ww_version = ENV['WW_VERSION'] || "4.6.4" # set this env-var to adjust which version of WW will be installed
  
  config.vm.define :wwctl do |wwctl|
    wwctl.vm.box = "rockylinux/9"
    wwctl.vm.box_version = "5.0.0" # see: https://git.resf.org/infrastructure/meta/issues/138
    wwctl.vm.network :private_network, :ip => "10.100.100.254", :libvirt__dhcp_enabled => false, :libvirt__network_name => 'netboot'
    wwctl.vm.synced_folder '.', '/vagrant', disabled: true

    wwctl.trigger.after :up, :reload do |trigger|
      trigger.run = {path: "export-libvirt-sock.sh"}
    end

    wwctl.vm.provider :libvirt do |domain|
      domain.memory = 2048
      domain.cpus = 2
      domain.machine_virtual_size = 32
    end

    wwctl.vm.provision "init-wwctl", type: "shell", path: "init-scripts/init-wwctl.sh", args: [ww_version]
    wwctl.vm.provision "file", source: "alpine-bootable.def", destination: "alpine-bootable.def"
    wwctl.vm.provision "file", source: "alpine-boot.sh", destination: "alpine-boot.sh"
    wwctl.vm.provision "provision-vbmc", type: "shell", run: "never", path: "init-scripts/start-vbmcd.sh"
    wwctl.vm.provision "add-ww-nodes", type: "shell", run: "never", path: "init-scripts/add-ww-nodes.sh"
  end

  # Ram here is specific to the size of the ww node that's starting up. For alpine 768mb is fine - for EL or SLES
  # you will need to allocate a higher value for `domain.memory`.
  config.vm.define :wwnode1 do |node1|
    node1.vm.network :private_network, :libvirt__network_name => 'netboot', :libvirt__mac => '006e6f646531'
    node1.vm.synced_folder '.', '/vagrant', disabled: true
    node1.vm.provider :libvirt do |domain|
      domain.memory = 768
      domain.cpus = 1
      domain.mgmt_attach = false
      boot_network = {'network' => 'netboot'}
      domain.boot boot_network
    end
  end

  config.vm.define :wwnode2 do |node2|
    node2.vm.network :private_network, :libvirt__network_name => 'netboot', :libvirt__mac => '006e6f646532'
    node2.vm.synced_folder '.', '/vagrant', disabled: true
    node2.vm.provider :libvirt do |domain|
      domain.memory = 768
      domain.cpus = 1
      domain.mgmt_attach = false
      boot_network = {'network' => 'netboot'}
      domain.boot boot_network
    end
  end

end
