# -*- mode: ruby -*-
# vi: set ft=ruby :
#
# MDEV-38981 reproduction environment
# 3x Ubuntu 24.04 VM, MariaDB 11.4 + Galera 4
#
#   vagrant up            # creates + provisions all 3 nodes (node1 bootstraps)
#   ./run_test_vagrant.sh # runs the reproduction test from the host
#
# Requires: VirtualBox + Vagrant. Provisioning is sequential, so the
# cluster is bootstrapped on galera1 before galera2/3 join via SST.

MARIADB_SERIES     = "11.4"     # ticket affects 11.4.10
WSREP_GTID_DOMAIN  = "4711"
CLUSTER_NAME       = "mdev38981"

NODES = [
  { name: "galera1", ip: "192.168.56.11", id: 1 },
  { name: "galera2", ip: "192.168.56.12", id: 2 },
  { name: "galera3", ip: "192.168.56.13", id: 3 },
]

CLUSTER_IPS = NODES.map { |n| n[:ip] }.join(",")

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-24.04"
  config.vm.box_check_update = false

  # First boot of the box can be slow (cloud-init, slow disks)
  config.vm.boot_timeout = 900

  # The shell provisioner uploads provision.sh itself, so /vagrant is not
  # needed. Disabling it also avoids rsync errors when the project dir
  # contains files the current user cannot read (e.g. root-owned perf.data).
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.provider "virtualbox" do |vb|
    vb.memory = 2048
    vb.cpus   = 2
    vb.linked_clone = true
    # Debug: show the VM console window to see where boot hangs
    #   VAGRANT_GUI=1 vagrant up
    vb.gui = ENV["VAGRANT_GUI"] == "1"
  end

  NODES.each do |n|
    config.vm.define n[:name] do |node|
      node.vm.hostname = n[:name]
      node.vm.network "private_network", ip: n[:ip]

      node.vm.provision "shell",
        path: "provision.sh",
        args: [
          n[:id].to_s, n[:name], n[:ip],
          CLUSTER_IPS, MARIADB_SERIES, WSREP_GTID_DOMAIN, CLUSTER_NAME
        ]
    end
  end
end
