#!/bin/bash
#
# Update debian packages inside basebox
#
# This script is not doing the right thing during image commit when a config
# name has been defined. To run without errors, make sure to run in a VM with
# this kind of Vagrantfile:
#   Vagrant.configure("2") do |config|
#     config.vm.box = "stretchpuppet"
#     config.ssh.insert_key = false
#   end

set -e

IMGDIR=/var/lib/libvirt/images
if [ ! -f Vagrantfile ]; then
    echo "no Vagrantfile found. are you in a vagrant project?" >&2
    exit 1
fi
boxname=$(grep 'vm\.box' Vagrantfile | sed -e 's/^.* "//;s/".*$//')
instancename=$(grep 'vm\.define' Vagrantfile | sed -e 's/^.* |//;s/|.*$//')
if [ -z "$instancename" ]; then
    instancename="default"
fi
backup=0

if [ -n "$1" ]; then
    case "$1" in
        "--no-backup")
            backup=1
            ;;
        *)
            echo "usage: $0 [--no-backup]" >&2
            exit 1
            ;;
    esac
fi

echo "${boxname}_${instancename}"

if [ "$backup" -eq 0 ]; then
    echo "backing up base box image $IMGDIR/${boxname}_vagrant_box_image_0.img to ../"
    sudo cp "$IMGDIR/${boxname}_vagrant_box_image_0.img" ../
fi

vagrant up
# still using apt-get to be compatible with wheezy
vagrant ssh -- 'sudo sh -c "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"'
vagrant halt

echo ready to commit to base image
sudo qemu-img commit "$IMGDIR/${boxname}_${instancename}.img"
vagrant destroy

echo "all done!"

if [ "$backup" -eq 0 ]; then
    echo "the backup was left in place in ../${boxname}_vagrant_box_image_0.img"
fi

