Skip to content
Snippets Groups Projects
Vagrantfile 3.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    
    # This Vagrantfile worked for Florian Sesser using Vagrant 2.2.19 and
    # the LibVirt with QEmu Hypervisor. Earlier Vagrant and VirtualBox did worked too.
    
    # Get a dedicated LibVirt pool name or use default one
    
    pool_name = ENV.has_key?('POOL_NAME') ? ENV['POOL_NAME'] : 'default'
    
    # For instance, one could create such pool beforehand as follows:
    #   export POOL_NAME=morph_local_$(id -un)
    #   POOL_PATH="/path/to/your/storage"
    #   mkdir -p "${POOL_PATH}"
    #   sudo virsh pool-define-as ${POOL_NAME} --type dir --target "${POOL_PATH}"
    #   sudo virsh pool-autostart ${POOL_NAME}
    #   sudo virsh pool-start ${POOL_NAME}
    
    Vagrant.configure("2") do |config|
      # For a complete reference, please see the online documentation at
      # https://docs.vagrantup.com.
    
    
      # Select the base image
      config.vm.box = "esselius/nixos"
      config.vm.box_version = "20.09"
      config.vm.box_check_update = false
    
      # No need to sync the working dir. with the guest boxess
      # Better use SFTP to transfer 
      config.vm.synced_folder ".", "/vagrant", disabled: true
    
      # Tune LibVirt/QEmu guests
      config.vm.provider :libvirt do |domain|
    
        # The default of one CPU should work
        # Increase to speed up boot/push/deploy
        # domain.cpus = 1
    
    
        # To use the self-updating deployment system you need more memory.  Giving
        # all of the VMs enough memory for this is rather taxing, though, and the
        # self-updating deployment system is not particularly useful for local
        # dev.  But should you want to:
        #
    
        # domain.memory = 4096
    
        #
        # Meanwhile, 1024 was apparently the default with VirtualBox 
        domain.memory = 1024
    
    
        # Using a specific pool may help to manage the disk space
        domain.storage_pool_name = pool_name
        domain.snapshot_pool_name = pool_name
    
        # No need of graphics - better use serial
        domain.graphics_type = "none"
        domain.video_type = "none"
      end
    
      config.vm.define "payments.localdev" do |config|
        config.vm.hostname = "payments"
    
        # Assign a static IP address inside the box host-only (Vagrant
    
        # calls it "private") network.  The address must be in the range
        # VirtualBox allows.
        # https://www.virtualbox.org/manual/ch06.html#network_hostonly says some
        # things about this.
        config.vm.network "private_network", ip: "192.168.56.21"
    
        # Add self signed SSL key for zkap-issuer:
    
        config.vm.provision "file", source: "private-keys/payments-localdev-ssl", destination: "/tmp/payments-localdev-ssl"
    
        config.vm.provision "shell", inline: "sudo mkdir -p /var/lib/letsencrypt/live/payments.localdev/"
        config.vm.provision "shell", inline: "sudo mv /tmp/payments-localdev-ssl/* /var/lib/letsencrypt/live/payments.localdev/"
    
      config.vm.define "storage1.localdev" do |config|
    
        config.vm.hostname = "storage1"
    
        config.vm.network "private_network", ip: "192.168.56.22"
    
      config.vm.define "storage2.localdev" do |config|
    
        config.vm.hostname = "storage2"
    
        config.vm.network "private_network", ip: "192.168.56.23"
    
      config.vm.define "monitoring.localdev" do |config|
    
        config.vm.hostname = "monitoring"
    
        config.vm.network "private_network", ip: "192.168.56.24"
    
      # To make the VMs assign the static IPs to the network interfaces we need a rebuild:
    
      ## Rename to 'nix.settings.trusted-users' after 20.09 or so:
    
      config.vm.provision "shell",
        inline: "echo '{ nix.trustedUsers = [ \"@wheel\" \"root\" \"vagrant\" ]; boot.kernelParams = [ \"console=tty0\" \"console=ttyS0,115200\" ]; }' > /etc/nixos/custom-configuration.nix"
    
      config.vm.provision "shell", inline: "nixos-rebuild switch"
    
      config.vm.provision "shell", inline: "systemctl stop firewall.service"
    
      config.vm.provision "shell", inline: "systemctl start serial-getty@ttyS0.service"
    
    
      config.trigger.after :up do |trigger|
        trigger.info = "Hostname and IP address this host actually uses:"
    
        trigger.run_remote = {inline: "echo `hostname` `ifconfig | egrep -o '192.168.56.[0-9]* '`"}