#! /bin/bash

. /usr/share/drbd-test/drbd-test.sh
set -e

usage() {
    [ $1 -eq 0 ] || exec >&2
    echo "USAGE: ${0##*/} [--internal-meta|--external-meta] [--max-peers=N] [--volume-group=volume-group] [--size=size] [--job=job-name] volume-name"
    exit $1
}

options=`getopt -o h --long thinpool:,internal-meta,external-meta,max-peers:,volume-group:,size:,job:,help -- "$@"` || usage 1
eval set -- "$options"

opt_internal_meta=
opt_external_meta=
opt_max_peers=1
opt_volume_group=
opt_size=
opt_job=
opt_thinpool=

while :; do
    case "$1" in
    -h|--help)
	usage 0
	;;
    --thinpool)
	opt_thinpool="$2"
	shift
	;;
    --internal-meta)
	opt_internal_meta=1
	opt_external_meta=
	;;
    --external-meta)
	opt_internal_meta=
	opt_external_meta=1
	;;
    --max-peers)
	opt_max_peers=$2
	shift
	;;
    --volume-group)
	opt_volume_group=$2
	shift
	;;
    --size)
	opt_size=$2
	shift
	;;
    --job)
	opt_job=$2
	shift
	;;
    --)
	shift
	break
	;;
    esac
    shift
done

[ -n "$opt_volume_group" -a -n "$opt_size" -a $# -eq 1 ] || usage 1

opt_name=$1

if [[ -z "$opt_thinpool" ]] ; then
	size_and_pool="--size $opt_size $opt_volume_group"
else
	size_and_pool="--virtualsize $opt_size --thin $opt_volume_group/$opt_thinpool"
fi

doit lvcreate $size_and_pool --name "$opt_name" > /dev/null
register_cleanup -- lvremove -f "$opt_volume_group/$opt_name"
dev=/dev/$opt_volume_group/$opt_name
status=0
if [ -n "$opt_internal_meta" ]; then
    msg=$(doit drbdmeta -f - v09 "$dev" internal create-md $opt_max_peers 2>&1) || status=$?
    if [ $status -ne 0 ]; then
	echo "$msg" >&2
	exit $status
    fi
    # FIXME: Add support for other meta-data versions ...
elif [ -n "$opt_external_meta" ]; then
    msg=$(doit drbdmeta -f - v09 "$dev" flex-external create-md $opt_max_peers 2>&1) || status=$?
    if [ $status -ne 0 ]; then
	echo "$msg" >&2
	exit $status
    fi
    # FIXME: Add support for other meta-data versions ...
fi
echo "$dev"
