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

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

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.hostname = 'foo.example.com'

  # This plugin is useful to make sure facts don't change for no reason
  config.timezone.value = 'UTC' if Vagrant.has_plugin?('vagrant-timezone')

  config.vm.provider 'virtualbox' do |v|
    v.gui = false
  end

  config.vm.define 'debian-11-x86_64', autostart: false do |host|
    host.vm.box = 'debian/bullseye64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'debian-12-x86_64', autostart: false do |host|
    host.vm.box = 'debian/bookworm64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'linuxmint-19-x86_64', autostart: false do |host|
    host.vm.box = 'ltsp/linuxmint-19.1-cinnamon-64bit'
    host.vm.provision 'shell',
                      inline: 'export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y ruby ruby-dev libc6-dev'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'ubuntu-18.04-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/bionic64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'ubuntu-20.04-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/focal64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'ubuntu-21.04-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/hirsute64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'ubuntu-21.10-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/impish64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'ubuntu-22.04-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/jammy64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  # the ssh bits on this did not work right, most of the steps for
  # generating things were done manually
  config.vm.define 'ubuntu-22.10-x86_64', autostart: false do |host|
    host.vm.box = 'ubuntu/kinetic64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  # images are at https://cloud.centos.org/centos/9-stream/x86_64/images/
  # can be imported with `vagrant box add --name centos/stream9 $url` you can also
  # use the host.vm.box_url below
  # facts land as centos-9-x86_64.facts
  #
  config.vm.define 'centos-stream9-x86_64', autostart: false do |host|
    host.vm.box = 'centos/stream9'
    host.vm.box_url = 'https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Vagrant-9-20240513.0.x86_64.vagrant-virtualbox.box'
    # centos packages their box with synced folders set to rsync (presumably
    # since vboxsf is not built in their kernel)
    # If the version of the kernel-headers/kernel-devel that are available
    # for download are newer than what is on the box then guest additions will
    # not build. If the stars align, then you can set `type: 'virtualbox'`
    # for synced_folder and maybe it will work, otherwise, it is a manual
    # effort to rsync the fact files back
    # host.vm.synced_folder '.', '/vagrant', type: 'virtualbox'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'dnf -y install wget make gcc net-tools'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    # commented to allow manual retrieval of the facts
    # host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
    # this will install the guest additions which requires `vagrant plugin install vagrant-vbguest`
    host.vbguest.auto_update = true
  end
  config.vm.define 'almalinux-8-x86_64', autostart: false do |host|
    host.vm.box = 'almalinux/8'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'dnf -y install wget make gcc net-tools'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'almalinux-9-x86_64', autostart: false do |host|
    host.vm.box = 'almalinux/9'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'dnf -y install wget make gcc net-tools'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'rockylinux-8-x86_64', autostart: false do |host|
    host.vm.box = 'rockylinux/8'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'dnf -y install wget make gcc net-tools'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'rockylinux-9-x86_64', autostart: false do |host|
    host.vm.box = 'rockylinux/9'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'dnf -y install wget make gcc net-tools'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'redhat-8-x86_64', autostart: false do |host|
    host.vm.box = 'generic/rhel8'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'redhat-9-x86_64', autostart: false do |host|
    host.vm.box = 'generic/rhel9'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'oraclelinux-8-x86_64', autostart: false do |host|
    host.vm.box = 'oraclelinux/8'
    host.vm.box_url = 'https://oracle.github.io/vagrant-projects/boxes/oraclelinux/8.json'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'oraclelinux-9-x86_64', autostart: false do |host|
    host.vm.box = 'oraclelinux/9'
    host.vm.box_url = 'https://oracle.github.io/vagrant-projects/boxes/oraclelinux/9.json'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'archlinux-x86_64', autostart: false do |host|
    host.vm.box = 'archlinux/archlinux'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'sles-11sp1-x86_64', autostart: false do |host|
    host.vm.box = 'suse/sles11sp3'
    host.vm.network 'private_network', ip: '192.168.123.2'
    host.vm.synced_folder '.', '/vagrant', type: 'nfs'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'sles-12sp1-x86_64', autostart: false do |host|
    host.vm.box = 'idar/sles12sp3'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'sles-15-x86_64', autostart: false do |host|
    host.vm.box = 'trueability/sles-15-sp1'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', inline: [
      'SUSEConnect -p sle-module-desktop-applications/15.1/x86_64',
      'SUSEConnect -p sle-module-legacy/15.1/x86_64',
      'zypper install --no-confirm net-tools-deprecated',
    ].join(' && ')
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'opensuse-42.3-x86_64', autostart: false do |host|
    host.vm.box = 'opensuse/openSUSE-42.3-x86_64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
  end
  config.vm.define 'opensuse-Tumbleweed-x86_64', autostart: false do |host|
    host.vm.box = 'opensuse/openSUSE-Tumbleweed-x86_64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
  end
  config.vm.define 'opensuse-15.4-x86_64', autostart: false do |host|
    host.vm.box = 'opensuse/Leap-15.4.x86_64'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
  end
  config.vm.define 'freebsd-11-x86_64', autostart: false do |host|
    host.vm.box = 'bento/freebsd-11'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'pkg install -y bash devel/ruby-gems'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -p now'
  end
  config.vm.define 'freebsd-12-x86_64', autostart: false do |host|
    host.vm.box = 'bento/freebsd-12'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'pkg install -y bash devel/ruby-gems'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -p now'
  end
  config.vm.define 'freebsd-13-x86_64', autostart: false do |host|
    host.vm.box = 'bento/freebsd-13'
    host.vm.synced_folder '.', '/vagrant'
    # this was needed for the 202309.08.0 release of this box
    host.ssh.shell = '/bin/sh'
    host.vm.provision 'shell', inline: 'pkg install -y bash devel/ruby-gems'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -p now'
  end
  config.vm.define 'gentoo-x86_64', autostart: false do |host|
    # gentoo needs some resources, otherwise the installation takes ages
    host.vm.provider 'virtualbox' do |v|
      v.memory = 4096
      v.cpus = 4
    end
    host.vm.box = 'generic/gentoo'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'shell', inline: 'emerge-webrsync --quiet && emerge app-crypt/gnupg net-misc/curl'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'solaris-11-x86_64', autostart: false do |host|
    host.vm.box = 'http://benden.us/vagrant/solaris-11.2.box'
    host.ssh.insert_key = false
    host.vm.provision 'shell', inline: 'pkg info gcc || pkg install gcc'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: "/sbin/shutdown -i S -g0 -y 'Bye' &"
  end
  config.vm.define 'openbsd-6.4-x86_64', autostart: false do |host|
    host.vm.box = 'generic/openbsd6'
    host.vm.box_version = '~> 1.9.18'
    host.vm.network :private_network, ip: '10.0.0.2'
    host.vm.synced_folder '.', '/vagrant', nfs: true
    host.vm.provision 'shell', inline: <<-SCRIPT.gsub(/^ +/, '')
      . ~/.profile

      pkg_info -qe 'bash->=0' || pkg_add bash
      pkg_add facter puppet-5.5.6
      ln -sf /usr/local/bin/gem24 /usr/bin/gem
      ln -sf /usr/local/bin/ruby24 /usr/bin/ruby
    SCRIPT
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'osx-10.10-x86_64', autostart: false do |host|
    host.vm.box = 'AndrewDryga/vagrant-box-osx'
    host.vm.network :private_network, ip: '10.0.0.2'
    host.vm.synced_folder '.', '/vagrant', nfs: true
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  # Windows boxes can sometimes be picky, so don't include them automatically (autostart: false)
  config.vm.define 'windows-server-2019-x86_64', autostart: false do |host|
    host.vm.hostname = 'foo'
    host.vm.box = 'gusztavvargadr/windows-server-2019-standard-core'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.communicator = 'winrm'
    host.vm.guest = :windows
    host.windows.set_work_network = true
    host.vm.provision 'shell', path: 'windows_get_facts.ps1'
    host.vm.provision 'shell', inline: 'shutdown -s -f -c "Fact Collection Complete"'
  end
  config.vm.define 'windows-server-2022-x86_64', autostart: false do |host|
    host.vm.hostname = 'foo'
    host.vm.box = 'gusztavvargadr/windows-server-2022-standard-core'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.communicator = 'winrm'
    host.vm.guest = :windows
    host.windows.set_work_network = true
    host.vm.provision 'shell', path: 'windows_get_facts.ps1'
    host.vm.provision 'shell', inline: 'shutdown -s -f -c "Fact Collection Complete"'
  end
  config.vm.define 'windows-10-x86_64', autostart: false do |host|
    host.vm.hostname = 'foo'
    host.vm.box = 'gusztavvargadr/windows-10'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.communicator = 'winrm'
    host.vm.guest = :windows
    host.windows.set_work_network = true
    host.vm.provision 'shell', path: 'windows_get_facts.ps1'
    host.vm.provision 'shell', inline: 'shutdown -s -f -c "Fact Collection Complete"'
  end
  config.vm.define 'windows-11-x86_64', autostart: false do |host|
    host.vm.hostname = 'foo'
    host.vm.box = 'gusztavvargadr/windows-11'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.communicator = 'winrm'
    host.vm.guest = :windows
    host.windows.set_work_network = true
    host.vm.provision 'shell', path: 'windows_get_facts.ps1'
    host.vm.provision 'shell', inline: 'shutdown -s -f -c "Fact Collection Complete"'
  end
  config.vm.define 'amazonlinux-2-x86_64', autostart: false do |host|
    host.vm.box = 'bento/amazonlinux-2'
    host.vm.provision 'shell', inline: 'yum -y install gcc glibc-devel'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'fedora-36-x86_64', autostart: false do |host|
    host.vm.box = 'generic/fedora36'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'fedora-37-x86_64', autostart: false do |host|
    host.vm.box = 'generic/fedora37'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'fedora-38-x86_64', autostart: false do |host|
    # default memory limit kills dnf as soon as we install packages
    host.vm.provider 'virtualbox' do |v|
      v.memory = 2048
    end
    host.vm.box = 'fedora/38-cloud-base'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    # rsync is used to get the vagrant dir into the VM.
    # We need to copy the factsets out of the VM by hand
    # host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
  config.vm.define 'fedora-39-x86_64', autostart: false do |host|
    # default memory limit kills dnf as soon as we install packages
    host.vm.provider 'virtualbox' do |v|
      v.memory = 2048
    end
    host.vm.box = 'fedora/39-cloud-base'
    host.vm.synced_folder '.', '/vagrant'
    host.vm.provision 'file', source: 'Gemfile', destination: 'Gemfile'
    host.vm.provision 'shell', path: 'get_facts.sh'
    # rsync is used to get the vagrant dir into the VM.
    # We need to copy the factsets out of the VM by hand
    # host.vm.provision 'shell', inline: '/sbin/shutdown -h now'
  end
end