#!/bin/sh

set -e

dm_major=$(printf %x "$(grep device-mapper /proc/devices | cut -f 1 -d ' ')")
case "$(stat -Lc %t:%T /dev/mapper/dmroot)" in
    ca:0)
        # nothing needed, xvda used directly
        ;;
    ca:3)
        # resize partition table itself
        # use undocumented ---pretend-input-tty (yes, three '-') to
        # force unattended operation, otherwise it aborts on first
        # prompt, even with '-s' option
        echo fix | parted ---pretend-input-tty /dev/xvda print >/dev/null
        # then resize 3rd partition, even though it is mounted
        echo yes 100% | parted ---pretend-input-tty /dev/xvda resizepart 3
        # and reload partition table; prefer partprobe over blockdev
        # --rereadpt, as it works on mounted partitions
        partprobe /dev/xvda
        ;;
    ca:*)
        echo "Unsupported partition layout, resize it manually" >&2
        exit 1
        ;;
    $dm_major:*)
        new_size=$(cat /sys/block/xvda/size)
        ro=$(cat /sys/block/xvda/ro)
        if [ "$ro" -eq 1 ]; then
            new_table="0 $new_size snapshot /dev/xvda /dev/xvdc2 N 16"
        else
            new_table="0 $new_size linear /dev/xvda 0"
        fi
        dmsetup load dmroot --table "$new_table"
        dmsetup resume dmroot
        ;;
    *)
        echo "Unsupported device type for root volume, resize it manually" >&2
        exit 1
        ;;
esac
resize2fs /dev/mapper/dmroot