Vagrant.configure("2") do |config|

  # configuration virtualbox
  config.vm.provider "virtualbox" do |vbox|
    vbox.linked_clone = true
  end
  config.vm.box = "debian/bookworm64"

  # accès par nom
  $hosts = <<-EOF
    grep -q moniteur /etc/hosts || echo "192.168.62.10 moniteur" >>/etc/hosts
    grep -q poste1 /etc/hosts || echo "192.168.62.21 poste1" >>/etc/hosts
    grep -q poste2 /etc/hosts || echo "192.168.62.22 poste2" >>/etc/hosts
  EOF
  config.vm.provision "shell", run: "always", inline: $hosts

  # Montage dossier
  config.vm.synced_folder ".", "/vagrant", owner: "root", group: "root", mount_options: ["uid=0", "gid=0"]

  # installation des outils
  $outils = <<-EOF
    export DEBIAN_FRONTEND=noninteractive
    sed -i 's/main.*$/main contrib non-free-firmware non-free/' /etc/apt/sources.list
    apt-get -qy update
    apt-get -qy install file less netcat-openbsd net-tools nmap screen emacs vim gnuplot rrdtool xauth
    apt-get -qy clean
  EOF
  config.vm.provision "shell", inline: $outils

  # Accès SSH
  config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "/tmp/id_rsa.pub", run: "always"
  $ssh = <<-EOF
    mkdir -p /root/.ssh
    cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
    rm /tmp/id_rsa.pub
    cat ~vagrant/.ssh/authorized_keys >> /root/.ssh/authorized_keys
  EOF
  config.vm.provision "shell", inline: $ssh, run: "always", privileged: true

  # moniteur
  $superviseur = <<-EOF
  apt-get -qy install snmp snmp-mibs-downloader
  cp /etc/snmp/snmp.conf /etc/snmp/snmp.conf.dpkg
  sed -i -e 's/^mibs :/#mibs :/' /etc/snmp/snmp.conf
  EOF

  $postes = <<-EOF
  apt-get -qy install snmpd
  cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.dpkg
  echo "agentAddress udp:161" >/etc/snmp/snmpd.conf
  echo "rocommunity lecture moniteur 1.3.6.1.2" >>/etc/snmp/snmpd.conf
  echo "rwcommunity ecriture moniteur 1.3.6.1.2" >>/etc/snmp/snmpd.conf
  systemctl restart snmpd
  EOF

  # moniteur
  config.vm.define "moniteur" do |moniteur|
    moniteur.vm.network "private_network", ip: "192.168.62.10"
    moniteur.vm.provision "shell", inline: "hostnamectl hostname moniteur"
    moniteur.vm.provision "shell", inline: $superviseur
  end

  # poste1
  config.vm.define "poste1" do |poste1|
    poste1.vm.network "private_network", ip: "192.168.62.21"
    poste1.vm.provision "shell", inline: "hostnamectl hostname poste1"
    poste1.vm.provision "shell", inline: $postes
  end

  # poste2
  config.vm.define "poste2" do |poste2|
    poste2.vm.network "private_network", ip: "192.168.62.22"
    poste2.vm.provision "shell", inline: "hostnamectl hostname poste2"
    poste2.vm.provision "shell", inline: $postes
  end
end
