Vagrant.configure(2) do |config|
    config.vm.provider :virtualbox do |vb|
        vb.memory = 4096
        vb.cpus = 8
    end

    config.vm.box = "ubuntu/bionic64"
    config.vm.box_version = "20180719.0.0"

    # vagrant plugin install vagrant-disksize
    config.disksize.size = '64GB'

    config.vm.provider :virtualbox do |vb|
        vb.name = "pgbackrest-test"
    end

    # Provision the VM
    config.vm.provision "shell", inline: <<-SHELL
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build Begin' && date

        # Suppress "dpkg-reconfigure: unable to re-open stdin: No file or directory" warning
        export DEBIAN_FRONTEND=noninteractive

        # Assign a host name
        sed -i 's/^127\.0\.0\.1\t.*/127\.0\.0\.1\tlocalhost pgbackrest-test/' /etc/hosts
        hostnamectl set-hostname pgbackrest-test

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Update Apt' && date
        apt-get update

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Synchronize Date' && date
        apt-get install -y ntpdate
        ntpdate pool.ntp.org

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Use Google DNS' && date
        echo 'supersede domain-name-servers 8.8.8.8;' >> /etc/dhcp/dhclient.conf
        /etc/init.d/networking restart

        # Set time sync settings so builds don't fail with clock drift errors
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Time Sync Settings' && date
        sudo /etc/init.d/virtualbox-guest-utils stop
        sudo /usr/sbin/VBoxService --timesync-set-on-restore --timesync-interval 5000 --timesync-set-threshold 1

        # Mount tmpfs at /home/vagrant/test for faster testing
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Mount tmpfs' && date
        sudo -u vagrant mkdir -p -m 770 /home/vagrant/test
        echo 'tmpfs /home/vagrant/test tmpfs size=2560M 0 1' >> /etc/fstab
        mount -a

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Perl Modules' && date
        apt-get install -y libdbd-pg-perl libio-socket-ssl-perl libxml-libxml-perl libxml-checker-perl libperl-critic-perl \
            libdevel-nytprof-perl libyaml-libyaml-perl

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Build Tools' && date
        apt-get install -y devscripts build-essential lintian git lcov cloc txt2man debhelper libssl-dev zlib1g-dev libperl-dev \
             libxml2-dev

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install AWS CLI' && date
        apt-get install -y python-pip
        pip install --upgrade awscli

        # Configure AWS CLI
        sudo -i -u vagrant aws configure set region us-east-1
        sudo -i -u vagrant aws configure set aws_access_key_id accessKey1
        sudo -i -u vagrant aws configure set aws_secret_access_key verySecretKey1

        # Create test alias for AWS CLI
        echo '' >> /home/vagrant/.profile
        echo '# Test alias for AWS CLI' >> /home/vagrant/.profile
        echo 'alias s3-test="export PYTHONWARNINGS=ignore && aws s3 --endpoint-url=https://172.17.0.2 --no-verify-ssl"' \
            >> /home/vagrant/.profile

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Devel::Cover' && date
        dpkg -i /backrest/test/package/u18-libdevel-cover-perl_1.29-2_amd64.deb

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Docker' && date
        curl -fsSL https://get.docker.com | sh
        sudo usermod -aG docker vagrant

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Dev Utilities' && date
        apt-get install -y vim htop

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install TeX Live' && date
        apt-get install -y --no-install-recommends texlive-latex-base texlive-latex-extra texlive-fonts-recommended
        apt-get install -y texlive-font-utils

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Create Postgres Group & pgBackRest User' && date
        adduser --uid=5001 --ingroup=vagrant --disabled-password --gecos "" pgbackrest

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build VM Images' && date
        rm -rf /backrest/test/.vagrant/docker/*
        rm -rf /backrest/test/.vagrant/libc/*
        rm -rf /backrest/test/.vagrant/package/*
        sudo su - vagrant -c '/backrest/test/test.pl --vm-build'

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build End' && date
    SHELL

  # Don't share the default vagrant folder
  config.vm.synced_folder ".", "/vagrant", disabled: true

  # Mount backrest path for testing
  config.vm.synced_folder "..", "/backrest"
end
