#!/bin/bash -e

fatal() { echo "FATAL [$(basename $0)]: $@" 1>&2; exit 1; }
warning() { echo "WARNING [$(basename $0)]: $@"; }
info() { echo "INFO [$(basename $0)]: $@"; }

usage() {
cat<<EOF
Syntax: $(basename $0) [--publish] appname
Converts appliance appname (e.g., core) to openstack image

Options::

    --publish           - if set, image will be devpay'ed and made public

Environment::

    BT_DEBUG            - turn on debugging
EOF
exit 1
}

while [ "$1" != "" ]; do
    case $1 in
        --help|-h )  usage;;
        --publish)   publish="yes";;
        *)           if [ -n "$appname" ]; then usage; else appname=$1; fi ;;
    esac
    shift
done

[ -n "$appname" ] || usage
[ -n "$publish" ] || warning "--publish was not specified"

[ -n "$BT_DEBUG" ] && set -x

export BT=$(dirname $(readlink -f $0))
export BT_CONFIG=$BT/config
. $BT_CONFIG/common.cfg
. $BT_CONFIG/build.cfg

O=$BT_BUILDS/openstack
mkdir -p $O

[ -n "$BT_VERSION" ] || fatal "BT_VERSION not set"

isofile=turnkey-$appname-$BT_VERSION.iso
name=turnkey-$appname-$BT_VERSION
rootfs=$name.rootfs
cdroot=$name.cdroot

$BT/bin/iso-download $BT_ISOS $BT_VERSION $appname
$BT/bin/iso-verify $BT_ISOS $BT_VERSION $appname

cd $O
tklpatch-extract-iso $BT_ISOS/$isofile

tklpatch-apply $rootfs $BT/patches/headless
tklpatch-apply $rootfs $BT/patches/cloud
tklpatch-apply $rootfs $BT/patches/openstack
$BT/bin/rootfs-cleanup $rootfs

$BT/bin/aptconf-tag $rootfs openstack

$BT/bin/openstack-bundle $rootfs

$BT/bin/generate-signature $O/$name-openstack.tar.gz

# publish if specified
if [ "$publish" == "yes" ]; then
    export PUBLISH_DEST=${BT_PUBLISH_IMGS}/openstack/
    $BT/bin/publish-files $O/$name-openstack.{tar.gz,tar.gz.sig}

    export PUBLISH_DEST=${BT_PUBLISH_META}/turnkey-$appname/$BT_VERSION/
    $BT/bin/publish-files $O/$name-openstack.tar.gz.sig
fi

if [ -z "$BT_DEBUG" ] && ! (mount | grep -q $(basename $rootfs)); then
    rm -rf $rootfs
    rm -rf $cdroot
fi

